Spring Cloud Security OAuth2授权模式和资源服务器
文章目录
- 一、授权模式
- 1.1授权码模式
- 1.2简化模式
- 1.3密码模式
- 1.4客户端模式
- 二、资源服务器
- 2.1 资源服务器配置
- 2.2 测试
一、授权模式
1.1授权码模式
下图为授权码模式交互图:
① 资源拥有者打开客户端,客户端要求资源拥有者给予授权,它将浏览器被重定向到授权服务器,重定向时会附加客户端的身份信息。如:http://localhost:3001/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
参数(授权码)
②浏览器出现向授权服务器授权页面,之后将用户同意授权。
③授权服务器将授权码(AuthorizationCode
)转经浏览器发送给client
(通过redirect_uri
)
④客户端拿着授权码向授权服务器索要访问access_token
,请求如下:http://localhost:3001/oauth/token? client_id=c1&client_secret=secret&grant_type=authorization_code&code=5PgfcD&redirect_uri=http://w ww.baidu.com
⑤授权服务器返回令牌(access_token
)
这种模式是四种模式中最安全的一种模式。一般用于client
是Web
服务器端应用或第三方的原生App
调用资源服务的时候。因为在这种模式中access_token
不会经过浏览器或移动端的App
,而是直接从服务端去交换,这样就最大限度的减小了令牌泄漏的风险。
测试:
浏览器访问认证页面:
http://localhost:3001/oauth/authorize?client_id=c1&response_type=code&scope=all&redirect_uri=http://www.baidu.com
然后输入模拟的账号和密码点登陆之后进入授权页面
确认授权后,浏览器会重定向到指定路径并附带授权码,最后使用该授权码获取token。
获取token
成功:
1.2简化模式
下图是简化模式交互图:
①资源拥有者打开客户端,客户端要求资源拥有者给予授权,它将浏览器被重定向到授权服务器,重定向时会 附加客户端的身份信息。如:http://localhost:3001/oauth/authorize?client_id=c1&response_type=token&scope=all&redirect_uri=http://www.baidu.com
参数描述同授权码模式 ,注意response_type=token
。
②浏览器出现向授权服务器授权页面,之后将用户同意授权。
③授权服务器将授权码将令牌(access_token
)以Hash
的形式存放在重定向uri
的fragment
中发送给浏览器:
注:fragment
主要是用来标识URI
所标识资源里的某个资源,在URI
的末尾通过(#)作为 fragment
的开头,js
通过响应浏览器地址栏变化的方式能获取到fragment
就行了。
简化模式用于没有服务器端的第三方单页面应用,因为没有服务器端就无法接收授权码。
1.3密码模式
下图是密码模式交互图:
①资源拥有者将用户名、密码发送给客户端
②客户端拿着资源拥有者的用户名、密码向授权服务器请求令牌(access_token
),请求如下:http://localhost:3001/oauth/token? client_id=c1&client_secret=123&grant_type=password&username=admin&password=admin
;只支持POST
请求。
参数列表如下:
- client_id:客户端准入标识
- client_secret:客户端秘钥
- grant_type:授权类型,
password
表示密码模式 - username:资源拥有者用户名
- password:资源拥有者密码
③授权服务器将令牌(access_token
)发送给client
注:这种模式意味着直接将用户敏感信息泄漏给了client
,因此这就说明这种模式只能用于client
是我们自己开发的情况下。因此密码模式一般用于我们自己开发的,第一方原生App
或第一方单页面应用。
1.4客户端模式
下图是客户端模式交互图:
①客户端向授权服务器发送自己的身份信息,并请求令牌(access_token
)
②确认客户端身份无误后,将令牌(access_token)发送给client,请求如下:http://localhost:3001/oauth/token?client_id=c1&client_secret=123&grant_type=client_credentials
,支持POST
请求
参数列表如下:
- client_id:客户端准入标识。
- client_secret:客户端秘钥。
- grant_type:授权类型,填写
client_credentials
表示客户端模式
注:这种模式是最方便但最不安全的模式。因此这就要求我们对client
完全的信任,而client
本身也是安全的。因此这种模式一般用来提供给我们完全信任的服务器端服务。比如,合作方系统对接,拉取一组用户信息。
二、资源服务器
代码和环境搭建忽略,详情见:https://github.com/hucheng1997/security-oauth2
2.1 资源服务器配置
资源服务器配置类继承ResourceServerConfigurerAdapter
重写configure()
方法:
public class ResourceServerConfigurerAdapter implements ResourceServerConfigurer {public ResourceServerConfigurerAdapter() {}public void configure(ResourceServerSecurityConfigurer resources){}public void configure(HttpSecurity http){}
}
参数为ResourceServerSecurityConfigurer
的configure()
中主要配置:
- tokenServices:
ResourceServerTokenServices
类的实例,用来实现令牌服务 - tokenStore:
TokenStore
类的实例,指定令牌如何访问,与tokenServices
配置可选 - resourceId:这个资源服务的
ID
,这个属性是可选的,但是推荐设置并在授权服务中进行验证。 - 其他的拓展属性例如
tokenExtractor
令牌提取器用来提取请求中的令牌。
参数为HttpSecurity
的configure()
中主要配置:
- 请求匹配器,用来设置需要进行保护的资源路径,默认的情况下是保护资源服务的全部路径。
- 通过
http.authorizeRequests()
来设置受保护资源的访问规则 - 其他的自定义权限保护规则通过
HttpSecurity
来进行配置。
@EnableResourceServer 注解自动增加了一个类型为OAuth2AuthenticationProcessingFilter
的过滤器链。
2.2 测试
申请令牌:
访问资源:
使用错误的token
访问资源:
Spring Cloud Security OAuth2授权模式和资源服务器相关推荐
- gateway oauth2 对称加密_深入理解Spring Cloud Security OAuth2及JWT
因项目需要,需要和三方的oauth2服务器进行集成.网上关于spring cloud security oauth2的相关资料,一般都是讲如何配置,而能把这块原理讲透彻的比较少,这边自己做一下总结和整 ...
- 玩转Spring Cloud Security OAuth2身份认证扩展——电话号码+验证码认证
在程序的认证过程中,除了常规的用户名和密码方式(可以参考深入理解Spring Cloud Security OAuth2身份认证),也经常会出现电话号码+密码的方式:电话号码+验证码的方式:或者第三方 ...
- 【java_wxid项目】【第七章】【Spring Cloud Security Oauth2集成】
主项目链接:https://gitee.com/java_wxid/java_wxid 项目架构及博文总结: 点击:[使用Spring Boot快速构建应用] 点击:[使用Spring Cloud O ...
- Spring Cloud入门-Oauth2授权之基于JWT完成单点登录(Hoxton版本)
文章目录 Spring Cloud入门系列汇总 摘要 单点登录简介 创建oauth2-client模块 修改授权服务器配置 网页单点登录演示 调用接口单点登录演示 oauth2-client添加权限校 ...
- Spring Cloud Security OAuth2结合网关
文章目录 一.需求分析 二.服务搭建 2.1 注册中心 Eureka 搭建 2.2 网关 Zuul 搭建 2.2.1 转发明文token给微服务 2.2.2 微服务处理 token 2.2.3 Spr ...
- Spring Security Oauth2 授权码模式下 自定义登录、授权页面
主要说明:基于若依springcloud微服务框架的2.1版本 嫌弃缩进不舒服的,直接访问我的博客站点: http://binarydance.top//aticle_view.html?aticle ...
- Spring Security OAuth2 授权码模式 (Authorization Code)
前言 Spring Security OAuth2 授权码模式 (Authorization Code) 应该是授权登录的一个行业标准 整体流程 首先在平台注册获取CLIENT_ID和CLIENT_S ...
- Spring Cloud Security:Oauth2使用入门
摘要 Spring Cloud Security 为构建安全的SpringBoot应用提供了一系列解决方案,结合Oauth2可以实现单点登录.令牌中继.令牌交换等功能,本文将对其结合Oauth2入门使 ...
- 将Spring Security OAuth2授权服务JWK与Consul 配置中心结合使用
将Spring Security OAuth2授权服务JWK与Consul 配置中心结合使用 概述 在前文中介绍了OAuth2授权服务简单的实现密钥轮换,与其不同,本文将通过Consul实现我们的目的 ...
- Spring Cloud Security:Oauth2结合JWT使用
摘要 Spring Cloud Security 为构建安全的SpringBoot应用提供了一系列解决方案,结合Oauth2还可以实现更多功能,比如使用JWT令牌存储信息,刷新令牌功能,本文将对其结合 ...
最新文章
- c语言编程暴力是什么意思,(C语言代码)用笨办法暴力出来的,但是还是希望给大家一点思路上的启发...
- POJ 3034 Whac-a-Mole(DP)
- Stas and the Queue at the Buffet
- cytoscape插件下载_Cytoscape下载
- Linux 下 10 个最“危险”的命令,开发者应该了解
- 苹果或推中国特色版 iPhone;小米回应萌拍抄袭苹果事件;微软停止审核发布 Windows Phone 8.x | 极客头条...
- 1讲.Cisco模拟器-小凡软件的安装使用(附视频链接)
- sockscap+Bitvise Tunnelier 做内网渗透
- VelocityTracker使用
- [GW-CTF2019] babyvm
- 如何使用SPSS列联表分析,查看变量间的相关关系(下)
- p值小于0.05拒绝还是接受_p值的困惑
- html图片顺时针倾斜50度,【资源】纯CSS右上角倾斜四十五度封页角效果
- SMAA算法详解 - SMAAEdgeDetectionVS
- 【麒麟操作系统软件商店老是闪退?--麒麟系统软件商店卸载与重装(小白教程)】
- mysql 备份数据库结账_年度结转问题综合解答(转)
- java 画立体图形
- 标准解读系列之三:智慧高速建设需要什么样的技术架构?
- 收货地址 (默认收货地址)
- linux-tomcat下载安装(最新)
热门文章
- linux怎么查找bin文件内容,[转载]Linux 文件、内容查找(递归) ,grep ,find
- 1、锐捷交换机常用配置命令汇总,收藏备用!
- 初级会计资格-初级会计实务-知识点总结大全
- 收藏级干货——Auto CAD历史版本功能大盘点(上)
- Python3抓取糗百、不得姐
- tcp流式传输_收听互联网广播以及下载和流式传输免费音乐的最佳网站
- 计算机系统基础第二版_2020年注册环保工程师公共基础考试题库
- 数字孪生:第三人称鼠标操作
- 基于单片机的功放protues_基于单片机的音乐播放器设计
- 如何卸载Adobe Premiere Pro CC 2017和Adobe Photoshop CC 2018