Spring Authorization Server入门 (一) 初识SpringAuthorizationServer和OAuth2.1协议

这篇具有很好参考价值的文章主要介绍了Spring Authorization Server入门 (一) 初识SpringAuthorizationServer和OAuth2.1协议。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是OAuth2.1?

经过近些年网络和设备的不断发展,之前的oauth2.0发布的授权协议标准已经远远不能满足现在的场景和需求,根据其安全最佳实践,在oauth2.0的基础上移除了一些不安全的授权方式,并且对扩展协议进行整合。该协议定义了一系列关于授权的开放网络标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息。现在各三方平台提供的授权登录基本都是基于oauth协议的,例如微信、QQ、GitHub和Gitee等平台提供的授权登录。而Spring Security的团队也在社区的推动下推出了基于oauth2.1协议的授权框架:Spring Authorization Server。

什么是Spring Authorization Server?

Spring authorization server是由社区推动的一个项目,在Spring security团队的领导下基于Nimbus库重头编写,其目的主要是为 Spring 社区提供 OAuth 2.0 授权服务器支持,替代已被废弃的Spring Security OAuth框架。Spring authorization server提供了OAuth 2.1和OpenID Connect 1.0规范以及其他相关规范的实现。

Spring Authorization Server根据oauth2.1规范实现的特性列表

在列出特性时也会根据特性说明该特性对应的oauth2.1规范。

认证功能列表

角色解释(摘抄自oauth2.1规范文档 Roles)

  1. Resource Owner:资源拥有者;能够授予对受保护资源的访问权限的实体,通常指的是终端用户。
  2. Client:客户端;代表资源所有者发出受保护资源请求并获得其授权的应用程序。
  3. Authorization Server:认证服务器;服务器在成功对资源所有者进行身份验证并获得授权后向客户端发出访问令牌。
  4. Resource Server:资源服务器;托管受保护资源的服务器,能够使用访问令牌接受和响应受保护的资源请求。
  • 授权码模式

    授权码模式(Authorization Code Grant)是功能最完整、流程最严密的授权模式。它的特点就是通过客户端的后台服务器,与"服务提供商"的认证服务器进行互动;流程如下

    spring-authorization-server,Spring Authorization Server,Spring Security,Spring,spring,java

    更详细内容请查看规范中关于授权码模式的介绍.4.1. Authorization Code Grant

    授权码扩展流程PKCE(Proof Key for Code Exchange)

    使用授权码授予的OAuth 2.0公共客户端是易受授权码拦截攻击。该流程可以减轻攻击,通过使用代码交换证明密钥来抵御威胁。客户端生成code_verifier和code_challenge跟认证服务器进行交互,以生成的随机认证码进行身份认证。
    spring-authorization-server,Spring Authorization Server,Spring Security,Spring,spring,java
    更详细内容请查看规范中关于PKCE的介绍. rfc7636

  • 客户端模式

    客户端模式(Client Credentials Grant)指客户端以自己的名义,而不是以用户的名义,向"服务提供商"进行认证。严格地说,客户端模式并不属于OAuth框架所要解决的问题。在这种模式中,用户直接向客户端注册,客户端以自己的名义要求"服务提供商"提供服务,其实不存在授权问题;流程如下

    spring-authorization-server,Spring Authorization Server,Spring Security,Spring,spring,java

    更详细内容请查看规范中关于客户端模式的介绍.4.2. Client Credentials Grant

  • 设备授权码模式

    设备授权码模式(Device Authorization Grant)主要会出现在凭证式授权类型中,为设备代码,设备流中无浏览器或输入受限的设备提供的一种认证方式,设备会让用户在另一台设备上的浏览器中访问一个网页,以进行登录。 用户登录后,设备可以获取所需的访问令牌和刷新令牌;流程如下

spring-authorization-server,Spring Authorization Server,Spring Security,Spring,spring,java

更详细内容请查看规范中关于设备授权码模式的介绍.rfc8628

  • 刷新access token

    刷新令牌在获取access token时会同步获取刷新令牌(Refresh token),如果用户访问的时候,客户端的"访问令牌"已经过期,则需要使用"更新令牌(Refresh token)"申请一个新的访问令牌。

注意:oauth2.1移除了隐式授权模式(Implicit grant)和密码模式(Resource Owner Password Credentials Grant)。详见oauth2.1规范中提到的“与oauth2.0的区别”和oauth2.0规范中对于“密码模式”的描述:The resource owner password credentials grant MUST NOT be used.

Token生成

  • 令牌生成器

    框架提供了令牌生成器(OAuth2TokenGenerator),负责从提供的OAuth2TokenContext中根据TokenType类型生成对应的OAuth2Token,tokenGenerator很灵活,它可以支持access_token和refresh_token的任何自定义令牌格式。

  • JWT RFC 7519

  • JWS RFC 7515

客户端认证方式

client_secret_basic

客户端将clientId 和 clientSecret 通过 ‘:’ 号拼接,并使用 Base64 进行编码得到一个字符串。将此编码字符串放到请求头(Authorization)去发送请求。授权服务器通过获取请求头中的clientId和clientSecret对客户端进行认证。

client_secret_post

客户端将 clientId 和 clientSecret 放到请求体(表单)去发送请求。授权服务器获取请求参数中的clientId和clientSecret对客户端进行认证。

client_secret_jwt

client_secret_jwt方式就是利用 JWT 进行认证。请求方和授权服务器,两者都知道客户端的 client_secret,通过相同的 HMAC 算法(对称签名算法)去加签和验签 JWT ,可以达到客户端认证的目的。请求方通过HMAC算法,以 client_secret 作为密钥,将客户端信息加签生成 JWT;授权服务器使用相同的HMAC算法和client_secret,对请求方的 JWT 进行验签以认证客户端。

private_key_jwt

private_key_jwt 方式就是利用 JWT 进行认证;请求方拥有自己的公私钥(密钥对),使用私钥对 JWT 加签,并将公钥暴露给授权服务器;授权服务器通过请求方的公钥验证 JWT,也能达到客户端认证的目的。请求方维护了一对公私钥,通过 RSA算法,使用私钥将客户端信息加签生成 JWT;另外还通过接口暴露公钥给授权服务器;授权服务器使用请求方的公钥对请求方的 JWT进行验签以认证客户端。

none (public clients)

当客户端是公共客户端时认证服务器不会对客户端进行验证,PKCE(Proof Key for Code Exchange)流程要求客户端为公共客户端。

认证服务器端点

包含OAuth2.1和Open Connect 1.0相关端点,详见官网对于端点的介绍文档

总结

本篇文章只是一个引子,很多地方说的很简单,大概了解了一些关于spring Authorization Server和oauth协议的相关内容,如果对某个点感兴趣可以针对性的去读一些相关的文章。文章来源地址https://www.toymoban.com/news/detail-667387.html

到了这里,关于Spring Authorization Server入门 (一) 初识SpringAuthorizationServer和OAuth2.1协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Authorization Server入门 (十五) 分离授权确认与设备码校验页面

    2023-12-01修改:在session-data-redis(Github)分支中添加了基于 spring-session-data-redis 的实现,无需借助 nonceId 来保持认证状态,该分支已去除所有 nonceId 相关内容,需要注意的是 axios 在初始化时需要添加配置 withCredentials: true ,让请求携带cookie。当然一些响应json的处理还是使用下方的

    2024年02月14日
    浏览(26)
  • Spring Authorization Server入门 (二十) 实现二维码扫码登录

    打开网页,发起授权申请/未登录被重定向到登录页面 选择二维码登录,页面从后端请求二维码 页面渲染二维码图片,并轮询请求,获取二维码的状态 事先登录过APP的手机扫描二维码,然后APP请求服务器端的API接口,把用户认证信息传递到服务器中 后端收到APP的请求后更改

    2024年02月21日
    浏览(28)
  • 【Spring Authorization Server 系列】(一)入门篇,快速搭建一个授权服务器

    官方主页:https://spring.io/projects/spring-authorization-server Spring Authorization Server 是一个框架,提供了 OAuth 2.1 和 OpenID Connect 1.0 规范以及其他相关规范的实现。 它建立在 Spring Security 之上,为构建 OpenID Connect 1.0 Identity Providers 和 OAuth2 Authorization Server 产品提供安全、轻量级和可定制

    2024年02月16日
    浏览(37)
  • Spring Authorization Server入门 (十二) 实现授权码模式使用前后端分离的登录页面

    2023-12-01修改:在session-data-redis(Github)分支中添加了基于 spring-session-data-redis 的实现,无需借助 nonceId 来保持认证状态,该分支已去除所有 nonceId 相关内容,需要注意的是 axios 在初始化时需要添加配置 withCredentials: true ,让请求携带cookie。当然一些响应json的处理还是使用下方的

    2024年02月13日
    浏览(29)
  • Spring Authorization Server入门 (三) 集成流程说明、细节补充和各种方式获取token测试

    在上一篇文章中的AuthorizationConfig.java配置类中,类上有三个注解,分别是@Configuration、@EnableWebSecurity和@EnableMethodSecurity注解,虽然在类中有注释,但是这里在细讲一下,同时放一下官网的说明 @EnableWebSecurity 加载了WebSecurityConfiguration配置类, 配置安全认证策略。 加载了Authenti

    2024年02月11日
    浏览(30)
  • Spring Security 6.x 系列【28】授权服务器篇之Spring Authorization Server 1.0 入门案例

    有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.0.4 本系列Spring Security 版本 6.0.2 本系列Spring Authorization Server 版本 1.0.2 源码地址:https://gitee.com/pearl-organization/study-spring-security-demo 在前几篇文档中,我们学习了 OAuth 2.0 协议,并使用 spring-security-oauth2-client 完成

    2024年02月12日
    浏览(29)
  • Spring Authorization Server入门 (八) Spring Boot引入Security OAuth2 Client对接认证服务

    在之前的文章中实现了一个认证服务,并且添加了一些自定义的内容,现在暂时没想到认证服务的新内容,本篇文章就先写一下客户端对接的吧,水一篇。 当用户通过客户端去访问一个受限的资源时,客户端会检测是否有登录信息,没有登录信息会重定向至认证服务器去请求

    2024年02月21日
    浏览(37)
  • Spring Authorization Server入门 (十三) 实现联合身份认证,集成Github与Gitee的OAuth登录

    什么是联合身份认证?       通过Spring Security OAuth2 Client(Login)模块集成第三方登录至自己的认证服务中,使用联合身份认证只需要请求认证服务,不通过前端来跳转三方的授权申请链接,而是统一通过认证服务来跳转,只需要维护Spring Authorization Server中身份认证提供商

    2024年02月05日
    浏览(33)
  • Spring Authorization Server 授权服务器

    Spring Authorization Server 遵循Oauth2.1和OpenID Connect 1.0,它建立在 Spring Security 之上。 要求JDK11以上 使用Idea创建一个Maven的Spring Boot(笔者使用的是 spring boot 2.7 )项目 pom需要引入 Authorization Server的配置 完整的pom.xml文件如下: 使用 @Bean 和 @Configuration 创建配置,这是官方推荐的最小配

    2024年02月16日
    浏览(29)
  • Spring Security 源码解读:OAuth2 Authorization Server

    样例代码请参考:spring-security-oauth2.0-sample Spring Authorization Server刚发展不久,还没有springboot版本,而Resource Server有,但是两个底层很多不兼容,会重复引入不同版本的jar包。 另外,该 spring-security-oauth2-authorization-server 依赖支持OAuth2.1草案规范。 关于 OAuth2.1 草案介绍请参考

    2023年04月22日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包