前后端分离架构下的OAuth2.0授权流程

前后端分离案例代码:spring-security-oauth2.0-sample

关于OAuth2.0规范介绍请参考 OAuth 2.0 Simplified
关于OAuth2.1草案介绍请参考 OAuth 2.1

在这里插入图片描述

  1. 用户点击前端开始第三方登录
  2. 前端调用后端接口开始第三方登录
  3. 后端组装完client_id,redirect_uri, response_type, state等参数构造重定向到第三方授权服务器的连接,返回给前端。链接如:http://wechat.com/oauth2/code?response_type=code&client_id=clientid&state=state&redirect_uri=http://我的应用前端地址
  4. 重定向链接回到浏览器,浏览器准备开始重定向
  5. 重定向至第三方应用
  6. 第三方应用返回是否授权页面给浏览器
  7. 用户点击同意授权,浏览器返回同意给授权服务器
  8. 授权服务器根据之前的redirect_uri返回code和state等参数(通过浏览器重定向实现,图中省略了到浏览器再到前端的步骤)
  9. 前端将code和state参数提交给当前应用后端
  10. 后端拿着前端返回的code、state和后端保存的client_id和client_secret参数去授权服务器换取accessToken以及refreshToken。(client_secret可以通过url(deprecated since OAuth2.1)、header、body方式传输,常用basic方式)
  11. 授权服务器校验参数成功,返回accessToken以及refreshToken给后端
  12. 后端拿着accessToken去资源服务器换取受限资源
  13. 资源服务器校验accessToken,成功后返回受限资源,后端根据受限资源可做处理
  14. 后端 也可将资源返回前端展示…

注意:前端先获取code,也就是前端地址就是redirect_url的地址,wechat直接发送code到前端,然后前端再把code返回后端(为什么不直接返回后端?因为当前应用和第三方应用的联系都是通过浏览器重定向建立了,不会直接交互;且后端不会也不应该直接暴露接口给本应用之外的请求);甚至再implicit模式下前端直接获取access_token都不需要后端参与,这种需要保证应用处于信任的环境中。(OAuth2.1草案中取消了implicit和password的模式)。

其中state参数是用来防止CSRF攻击的,关于这个问题,可参考 What is the purpose of the ‘state’ parameter in OAuth authorization request

此外,OAuth2.0可选、OAuth2.1强制要求的PKCE机制 不光可以用来防止CSRF,还可以防止authorization code injection attacks,这个问题可参考 RFC 7636: Proof Key for Code Exchange,所以用了PKCE就可以不用state参数了。

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 前后端分离是一种将前端界面与后端逻辑进行分离开发的架构方式,使得前端与后端可以并行开发。OAuth 2.0是一种授权框架,用于授权和认证流程的规范化,而Spring Security是一个在Java中实现安全控制的框架,提供了大量的安全特性。Spring Authorization Server是Spring Security中用于实现授权服务器的模块,它支持OAuth 2.0的各种授权模式。 密码模式是OAuth 2.0中的一种授权模式,它允许用户通过提交用户名和密码来获取访问令牌,然后使用该令牌来访问受保护的资源。在前后端分离架构中,可以使用Spring Security配合Spring Authorization Server来实现密码模式的认证和授权。 在密码模式下,前端首先需要收集用户的用户名和密码,并将其发送给后端。后端使用Spring Security提供的密码编码器对密码进行加密,并验证用户名和密码的正确性。如果验证通过,则后端向客户端颁发一个访问令牌,通常是一个JWT(JSON Web Token)。前端使用获得的访问令牌来访问需要受保护的资源,每次请求将该令牌作为Authorization头的Bearer字段发送给后端进行验证。后端可以使用Spring Security的资源服务器来验证该令牌的有效性,并根据用户的权限控制对资源的访问。 使用Spring Security和Spring Authorization Server的密码模式可以实现安全的前后端分离架构。通过合理配置和使用安全特性,可以保障用户的身份认证和资源的授权,确保系统的安全性。 ### 回答2: 前后端分离是一种软件架构模式,前端和后端通过使用API进行通信,分别负责处理用户界面和数据逻辑。OAuth 2.0是一种用于授权的开放标准协议,它允许用户在第三方应用程序中授权访问其受保护的资源。Spring Security是Spring框架中的一个模块,提供了身份验证和授权功能。 在前后端分离架构中,前端应用程序通常需要使用OAuth 2.0协议进行用户授权,以访问后端应用程序的受保护资源。为了实现密码模式,我们可以使用Spring Security的模块之一,即spring-authorization-server。 spring-authorization-server是Spring Security的一个子模块,用于实现OAuth 2.0协议中的授权服务器。密码模式是OAuth 2.0协议中的一种授权模式,允许前端应用程序通过用户的用户名和密码进行授权。密码模式在安全性上有一定的风险,因此在实际应用中需要谨慎使用。 使用spring-authorization-server的密码模式,我们可以在前端应用程序中收集用户的用户名和密码,并将其提交给后端应用程序进行验证。后端应用程序将使用Spring Security进行身份验证,并向前端应用程序颁发一个访问令牌,该令牌可以用于后续的API请求。 通过使用前后端分离OAuth 2.0和spring-authorization-server的密码模式,我们可以实现安全的用户授权和身份验证机制,确保只有经过授权的用户才能访问受保护的资源。这种架构模式能够提高系统的安全性和可扩展性,适用于各种类型的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

T.Y.Bao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值