文章目录

  • 一、授权模式
    • 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)
这种模式是四种模式中最安全的一种模式。一般用于clientWeb服务器端应用或第三方的原生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的形式存放在重定向urifragment中发送给浏览器:

注: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){}
}

参数为ResourceServerSecurityConfigurerconfigure()中主要配置:

  • tokenServicesResourceServerTokenServices类的实例,用来实现令牌服务
  • tokenStoreTokenStore类的实例,指定令牌如何访问,与tokenServices配置可选
  • resourceId:这个资源服务的ID,这个属性是可选的,但是推荐设置并在授权服务中进行验证。
  • 其他的拓展属性例如tokenExtractor令牌提取器用来提取请求中的令牌。

参数为HttpSecurityconfigure()中主要配置:

  • 请求匹配器,用来设置需要进行保护的资源路径,默认的情况下是保护资源服务的全部路径。
  • 通过http.authorizeRequests()来设置受保护资源的访问规则
  • 其他的自定义权限保护规则通过HttpSecurity来进行配置。

@EnableResourceServer 注解自动增加了一个类型为OAuth2AuthenticationProcessingFilter 的过滤器链。

2.2 测试

申请令牌:

访问资源:

使用错误的token访问资源:

Spring Cloud Security OAuth2授权模式和资源服务器相关推荐

  1. gateway oauth2 对称加密_深入理解Spring Cloud Security OAuth2及JWT

    因项目需要,需要和三方的oauth2服务器进行集成.网上关于spring cloud security oauth2的相关资料,一般都是讲如何配置,而能把这块原理讲透彻的比较少,这边自己做一下总结和整 ...

  2. 玩转Spring Cloud Security OAuth2身份认证扩展——电话号码+验证码认证

    在程序的认证过程中,除了常规的用户名和密码方式(可以参考深入理解Spring Cloud Security OAuth2身份认证),也经常会出现电话号码+密码的方式:电话号码+验证码的方式:或者第三方 ...

  3. 【java_wxid项目】【第七章】【Spring Cloud Security Oauth2集成】

    主项目链接:https://gitee.com/java_wxid/java_wxid 项目架构及博文总结: 点击:[使用Spring Boot快速构建应用] 点击:[使用Spring Cloud O ...

  4. Spring Cloud入门-Oauth2授权之基于JWT完成单点登录(Hoxton版本)

    文章目录 Spring Cloud入门系列汇总 摘要 单点登录简介 创建oauth2-client模块 修改授权服务器配置 网页单点登录演示 调用接口单点登录演示 oauth2-client添加权限校 ...

  5. Spring Cloud Security OAuth2结合网关

    文章目录 一.需求分析 二.服务搭建 2.1 注册中心 Eureka 搭建 2.2 网关 Zuul 搭建 2.2.1 转发明文token给微服务 2.2.2 微服务处理 token 2.2.3 Spr ...

  6. Spring Security Oauth2 授权码模式下 自定义登录、授权页面

    主要说明:基于若依springcloud微服务框架的2.1版本 嫌弃缩进不舒服的,直接访问我的博客站点: http://binarydance.top//aticle_view.html?aticle ...

  7. Spring Security OAuth2 授权码模式 (Authorization Code)

    前言 Spring Security OAuth2 授权码模式 (Authorization Code) 应该是授权登录的一个行业标准 整体流程 首先在平台注册获取CLIENT_ID和CLIENT_S ...

  8. Spring Cloud Security:Oauth2使用入门

    摘要 Spring Cloud Security 为构建安全的SpringBoot应用提供了一系列解决方案,结合Oauth2可以实现单点登录.令牌中继.令牌交换等功能,本文将对其结合Oauth2入门使 ...

  9. 将Spring Security OAuth2授权服务JWK与Consul 配置中心结合使用

    将Spring Security OAuth2授权服务JWK与Consul 配置中心结合使用 概述 在前文中介绍了OAuth2授权服务简单的实现密钥轮换,与其不同,本文将通过Consul实现我们的目的 ...

  10. Spring Cloud Security:Oauth2结合JWT使用

    摘要 Spring Cloud Security 为构建安全的SpringBoot应用提供了一系列解决方案,结合Oauth2还可以实现更多功能,比如使用JWT令牌存储信息,刷新令牌功能,本文将对其结合 ...

最新文章

  1. c语言编程暴力是什么意思,(C语言代码)用笨办法暴力出来的,但是还是希望给大家一点思路上的启发...
  2. POJ 3034 Whac-a-Mole(DP)
  3. Stas and the Queue at the Buffet
  4. cytoscape插件下载_Cytoscape下载
  5. Linux 下 10 个最“危险”的命令,开发者应该了解
  6. 苹果或推中国特色版 iPhone;小米回应萌拍抄袭苹果事件;微软停止审核发布 Windows Phone 8.x | 极客头条...
  7. 1讲.Cisco模拟器-小凡软件的安装使用(附视频链接)
  8. sockscap+Bitvise Tunnelier 做内网渗透
  9. VelocityTracker使用
  10. [GW-CTF2019] babyvm
  11. 如何使用SPSS列联表分析,查看变量间的相关关系(下)
  12. p值小于0.05拒绝还是接受_p值的困惑
  13. html图片顺时针倾斜50度,【资源】纯CSS右上角倾斜四十五度封页角效果
  14. SMAA算法详解 - SMAAEdgeDetectionVS
  15. 【麒麟操作系统软件商店老是闪退?--麒麟系统软件商店卸载与重装(小白教程)】
  16. mysql 备份数据库结账_年度结转问题综合解答(转)
  17. java 画立体图形
  18. 标准解读系列之三:智慧高速建设需要什么样的技术架构?
  19. 收货地址 (默认收货地址)
  20. linux-tomcat下载安装(最新)

热门文章

  1. linux怎么查找bin文件内容,[转载]Linux 文件、内容查找(递归) ,grep ,find
  2. 1、锐捷交换机常用配置命令汇总,收藏备用!
  3. 初级会计资格-初级会计实务-知识点总结大全
  4. 收藏级干货——Auto CAD历史版本功能大盘点(上)
  5. Python3抓取糗百、不得姐
  6. tcp流式传输_收听互联网广播以及下载和流式传输免费音乐的最佳网站
  7. 计算机系统基础第二版_2020年注册环保工程师公共基础考试题库
  8. 数字孪生:第三人称鼠标操作
  9. 基于单片机的功放protues_基于单片机的音乐播放器设计
  10. 如何卸载Adobe Premiere Pro CC 2017和Adobe Photoshop CC 2018