欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring Cloud Security OAuth2 实现分布式认证授服务测试

程序员文章站 2022-06-13 15:42:22
...

一、项目目录

Spring Cloud Security OAuth2 实现分布式认证授服务测试

二、测试模式

1、授权码模式

首先我们需要先获得授权码,然后通过授权码获得令牌。就跟我们之前说的美团点评招聘微信登陆是一样的。

(1)资源拥有者打开客户端,客户端要求资源拥有者给予授权,它将浏览器被重定向到授权服务器,重定向时会 附加客户端的身份信息。如:

http://localhost:53020/uaa/oauth/authorize?client_id=c1&response_type=code&scope=all&redirect_uri=http://www.baidu.com

client_id:客户端准入标识。

response_type:授权码模式固定为code。

scope:客户端权限。

redirect_uri:跳转uri,当授权码申请成功后会跳转到此地址,并在后边带上code参数(授权码)

我们输入后就会出现一个登陆页面(这个url就像生成的二维码,只不过我们扫码之后,登陆的操作就不需要我们做了):

Spring Cloud Security OAuth2 实现分布式认证授服务测试

通过我们配置的UserDetailsService从数据库中查到的,可以参考这个,这个不再赘述:

https://blog.csdn.net/weixin_44588495/article/details/105918081

登陆后(这个像点击授权登陆一样):

Spring Cloud Security OAuth2 实现分布式认证授服务测试

点击完授权之后(这个code就是我们拿到的授权码,在美团那个场景相当于调用了,美团的接口,将授权码发送给美团):

注意:baidu.com/?code=84c8d5

Spring Cloud Security OAuth2 实现分布式认证授服务测试

(2)客户端拿着授权码向授权服务器索要访问access_token(申请令牌

localhost:53020/uaa/oauth/token?client_id=c1&client_secret=secret&grant_type=authorization_code&code=84c8d5&redirect_uri=http://www.baidu.com
参数列表如下
client_id:客户端准入标识。
client_secret:客户端秘钥。
grant_type:授权类型,填写authorization_code,表示授权码模式
code:授权码,就是刚刚获取的授权码,注意:授权码只使用一次就无效了,需要重新申请。
redirect_uri:申请授权码时的跳转url,一定和申请授权码时用的redirect_uri一致。
 

Spring Cloud Security OAuth2 实现分布式认证授服务测试

上面是令牌,下面是刷新令牌。授权码模式,我们就测试完了。

这种模式是四种模式中最安全的一种模式。一般用于clientWeb服务器端应用或第三方的原生App调用资源服务
的时候。因为在这种模式中access_token不会经过浏览器或移动端的App,而是直接从服务端去交换,这样就最大
限度的减小了令牌泄漏的风险

2、简化模式

(1)资源拥有者打开客户端,客户端要求资源拥有者给予授权,它将浏览器被重定向到授权服务器,重定向时会 附加客户端的身份信息。如:

localhost:53020/uaa/oauth/authorize?client_id=c1&response_type=token&scope=all&redirect_uri=http://www.baidu.com

参数描述同授权码模式 ,注意response_type=token,说明是简化模式.。

2)浏览器出现向授权服务器授权页面,之后将用户同意授权。

3)授权服务器将授权码将令牌(access_token)以Hash的形式存放在重定向urifargment中发送给浏览器。
 
一般来说,简化模式用于没有服务器端的第三方单页面应用,因为没有服务器端就无法接收授权码。
Spring Cloud Security OAuth2 实现分布式认证授服务测试
Spring Cloud Security OAuth2 实现分布式认证授服务测试
直接拿到了token。

3、密码模式

 (1)资源拥有者将用户名、密码发送给客户端
(2)客户端拿着资源拥有者的用户名、密码向授权服务器请求令牌(access_token),请求如下: 
 
localhost:53020/uaa/oauth/token?client_id=c1&client_secret=secret&grant_type=password&username=zhangsan&password=123
参数列表如下:
client_id:客户端准入标识。
client_secret:客户端秘钥。
grant_type:授权类型,填写password表示密码模式
username:资源拥有者用户名。
password:资源拥有者密码
 
(3)授权服务器将令牌(access_token)发送给client
这种模式十分简单,但是却意味着直接将用户敏感信息泄漏给了client,因此这就说明这种模式只能用于client是我
们自己开发的情况下。因此密码模式一般用于我们自己开发的,第一方原生App或第一方单页面应用。
 
Spring Cloud Security OAuth2 实现分布式认证授服务测试

4、客户端模式

1)客户端向授权服务器发送自己的身份信息,并请求令牌(access_token
2)确认客户端身份无误后,将令牌(access_token)发送给client,请求如下:
localhost:53020/uaa/oauth/token?client_id=c1&client_secret=secret&grant_type=client_credentials
client_id:客户端准入标识。
client_secret:客户端秘钥。
grant_type:授权类型,填写client_credentials表示客户端模式
这种模式是最方便但最不安全的模式。因此这就要求我们对client完全的信任,而client本身也是安全的。因
此这种模式一般用来提供给我们完全信任的服务器端服务。比如,合作方系统对接,拉取一组用户信息。
 
Spring Cloud Security OAuth2 实现分布式认证授服务测试
源码aaa@qq.com:Zesystem/oauth2.0_init.git