七叶笔记 » java编程 » Java中OAuth2.0第三方授权原理与实战

Java中OAuth2.0第三方授权原理与实战

RFC6749

OAuth2的官方文档在RFC6749:https://datatracker.ietf.org/doc/html/rfc6749

以王者荣耀请求微信登录的过程为例

A:Client申请访问用户资源B:用户授权(过程较复杂)一次有效C:Client向Server请求一个长时间有效的tokenD:返回tokenE:使用token访问资源

OAuth 2.0授权4大模式

授权码模式:完整、严密,第三方认证和授权的最主流实现

A:APP请求微信登录B:用户信息验证C:返回只能使用一次的授权码D:APP把授权码发给后台服务,服务请求微信登录请求一个长期有效的tokenE:返回长期有效的token

token只有APP的后台服务和微信的后台才有,二者之间使用token通信,保证数据不易泄露到后台黑客

简化模式:令牌用户可见,移动端的常用实现手段

A:APP请求微信登录B:用户信息验证C:直接返回一个长期有效的token

密码模式:用户名密码都返回

A:用户把用户名 + 密码发送给APPB:APP可以直接用账号 + 密码访问微信后台

客户端模式:后台内容应用之间进行访问

微信登录会为APP分配一个内部的特定用户名和密码,APP用这个账号 + 密码和微信沟通,微信返回一个token,APP可以用这个token做很多部门自身的事情

合同到期后的续约机制

通常拿到Access token时还会拿到一个Refresh token,可以用来延长token的有效期

F:token已过期G:使用Refresh token和微信登录沟通,尝试延长tokenH:重新返回一个新的token

OAuth2.0第三方授权实战

oauth-client

表示王者荣耀端

pom文件:

SpringBoot的经典启动类:

创建OAuth2的配置类:

配置文件application.yaml:

定义用户id为my_client_id,密码为my_client_secret定义“微信登录服务”为:http://localhost:9090/oauth/authorize请求长期有效token的地址为:http://localhost:9090/oauth/token拿到token后请求用户信息的地址为:http://localhost:9090/user

oauth-server

表示微信客户端

pom文件:

创建SpringBoot启动类:

创建controller:

提供一个API接口,模拟资源服务器

创建oauth2的关键配置类:

现在需要提供一个登录页面让用户输入用户名和密码,并设置一个管理员账户:

配置文件application.yaml:

分别启动oauth-server和oauth-client进行测试:访问localhost:8080/hello

访问hello时会重定向到login

访问登录时又会重定向到微信登录:

之后又会重定向到:

输入账户名+密码:

继续看控制台:登录成功后还是会被重定向

此时再访问就会有授权码了(只能用一次):

此时浏览器拿着授权码才去真正请求王者荣耀的hello接口(浏览器自动使用授权码交换token,对用户透明):

王者荣耀使用授权码请求微信得到一个token和用户信息并返回给浏览器,浏览器再使用这个token调王者荣耀的hello接口拿用户信息:

到此这篇关于Java中OAuth2.0第三方授权原理与实战的文章就介绍到这了,更多相关Java OAuth2.0第三方授权内容请搜索七叶笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持七叶笔记!

相关文章