专栏首页程序猿 Damon 带你进阶全栈Oauth2的授权码模式《上》

Oauth2的授权码模式《上》

1、 前言

在上一篇 Oauth2 的认证实战-HA 篇 中,我们说过 Oauth2 的高可用方案,但其实其场景仅仅在于密码模式下,如果是授权码模式下,将有点瑕疵,甚至需要配置其他的 hosts 来进行处理。

2、Oauth2 的授权码模式

2.1 回忆

我们先回忆下,上一篇中如何做到 HA 的:首先各个客户端配置中配置了的认证中心是用域名的,也就是说通过服务发现来实现多个认证中心可以同时存在,并且通过 redis 来存储 token,达到共享的目的。其次,在配置中注意:加了"loadBalanced: true",另外在调用各个客户端时,我们通过网关来进行负载均衡的:"http://localhost:5555/provider-service/api/user/**",这样才能达到高可用的目的。

2.2 授权码模式下的高可用

  1. 获取授权码

在授权码模式下,在 postman 或其他工具输入:

localhost:5555/oauth-cas/oauth/authorize?response_type=code&client_id=provider-service&redirect_uri=http://provider-service/login&scope=all

发现会被拦截到登陆页:

大家注意看,其地址是经过负载均衡后解析的地址。在输入用户名、密码后,发现:

重定向到地址的前缀跟上面的登陆页一样,而且未带有 code 参数属性,这一点让我百思不得其解,需要后面的解析,谢谢。

但通过单机版的测试:

http://localhost:2000/oauth/authorize?response_type=code&client_id=provider-service&redirect_uri=http://provider-service/login&scope=all

输入地址后,发现出现了鉴权的确认页:

在点击 Approve、Authorize 后,输入用户名、密码,跳转到上面的重定向地址,并带有 code 属性参数:

http://provider-service/login?code=UW0OJ2
  1. 根据 code 获取 access_token
curl -i -X POST -d "grant_type=authorization_code&code=UW0OJ2&client_id=provider-service&client_secret=provider-service-123&redirect_uri=http://localhost:2001/login" http://localhost:2000/oauth/token

返回信息:

{"access_token":"a2af3f0b-27da-41b8-90c0-3bd2a1ed0421","token_type":"bearer","refresh_token":"91c22287-aa24-4305-95cf-38f7903865f3","expires_in":3283,"scope":"all"}
  1. 拿到 token 获取用户信息

有几种方式:一、头部携带,二、直接 get 方式传 token

方法一:

curl -i -H "Accept: application/json" -H "Authorization:bearer a2af3f0b-27da-41b8-90c0-3bd2a1ed0421" -X GET http://localhost:2001/api/user/getCurrentUser

方法二:

http://localhost:2001/api/user/getCurrentUser?access_token=a2af3f0b-27da-41b8-90c0-3bd2a1ed0421
  1. 刷新 token

通过上面的 "refresh_token" 来刷新获取新 token:

curl -i -X POST -d "grant_type=refresh_token&refresh_token=91c22287-aa24-4305-95cf-38f7903865f3&client_id=provider-service&client_secret=provider-service-123" http://localhost:2000/oauth/token
  1. 退出
curl -i -H "Accept: application/json" -H "Authorization:bearer fafcc3c8-28f5-4ce6-87df-e7f929fa6a34" -X DELETE http://localhost:5555/oauth-cas/api/logout

或者

curl -i -H "Accept: application/json" -H "Authorization:bearer 1297adc1-962f-4014-a63a-02d3c3683be6" -X DELETE http://localhost:2000/api/logout

结束福利

  开源实战利用 k8s 作微服务的架构设计代码:https://gitee.com/damon_one/spring-cloud-oauth2,欢迎大家 star,多多指教。

关于作者

笔名:Damon,技术爱好者,长期从事 Java 开发、Spring Cloud 的微服务架构设计,以及结合 docker、k8s 做微服务容器化,自动化部署等一站式项目部署、落地。Go 语言学习,k8s 研究,边缘计算框架 KubeEdge 等。公众号 程序猿Damon 发起人。个人微信 MrNull008,欢迎來撩。

欢迎关注 InfoQ: https://www.infoq.cn/profile/1905020/following/user

本文分享自微信公众号 - 程序猿Damon(Damon4X),作者:Damon

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Docker常用命令,你都会了吗

    关于 docker 的安装,在 基础设施服务k8s快速部署之HA篇 一文中,你可以快速安装docker的各种版本。

    程序猿Damon
  • 基础设施服务k8s快速部署之HA篇

    实战部署 Kubernetes,助力应用开发人员升级成为 DevOps。成就你全栈工程师之路,让你的薪资倍增。

    程序猿Damon
  • 如何利用k8s拉取私有仓库镜像

    最近实战时,发现一个很奇怪的问题,在通过 k8s 创建 pod,拉取镜像时,总是显示如下信息:

    程序猿Damon
  • Sqlilabs通关笔记(一)

    关卡源码下载地址: https://github.com/Audi-1/sqli-labs

    轩辕小子
  • 修改Centos服务器主机名称

    Centos服务器安装好之后,默认的主机名为:localhost.localdomain,为了便与管理,我们需要对服务器主机名称进行修改,此修改生效涉及到两个配...

    似水的流年
  • Temporary failure in name resolution 错误

    此处是因为localhost.localdomain无法解析造成的,此时修改/etc/hosts,添加如下行解决

    周小董
  • webgl图库研究(包括BabylonJS、Threejs、LayaboxJS、SceneJS、ThingJS等框架的特性、适用范围、支持格式、优缺点、相关网址)

    为实现企业80%以上的生产数据进行智能转化,在烟草、造纸、能源、电力、机床、化肥等行业,赢得领袖企业青睐,助力企业构建AI赋能中心,实现智能化转型升级。“远...

    acoolgiser
  • LeetCode 1443. 收集树上所有苹果的最少时间(自底向上DFS)

    给你一棵有 n 个节点的无向树,节点编号为 0 到 n-1 ,它们中有一些节点有苹果。 通过树上的一条边,需要花费 1 秒钟。 你从 节点 0 出发,请你返...

    Michael阿明
  • Servlet一:使用Servlet

    Servlet 是 Java Web 开发的基⽯,与平台⽆关的服务器组件,它是运⾏在 Servlet 容器/Web 应⽤服务器/Tomcat,负责与客户端进⾏通...

    乐心湖
  • 视开源为癌症 微软拥抱癌症是找死还是自杀?

    这两天大家都在讨论微软开源的事情,作为一名曾经的Java程序员,我已经有十年没有碰到代码了,除了”hello World”那句能通往开发世界的问候语外,我已经不...

    人称T客

扫码关注云+社区

领取腾讯云代金券