免费注册,打造高效身份管理
博客/开发者/OAuth 授权的工作原理是怎样的?足够安全吗?
OAuth 授权的工作原理是怎样的?足够安全吗?
Authing 官方2022.08.03阅读 1039

OAuth2 授权码模式的认证流程中涉及三方:用户、OAuth2 服务器(OP,OAuth2 Provider)、应用业务服务器(SP,Service Provider)。

SP、用户、OP 的交互目的分为以下几点

  • SP 希望拿到一个可信的身份断言,从而让用户登录。
  • SP 发起登录,会跳转到 OP 的认证页面,OP 让用户登录,并授权自己的信息,然后 OP 将一个授权码 code 发给 SP。实际上这是在通过引用来传递用户信息。
  • SP 收到授权码 code 后,结合 Client ID 和 Client Secret 到 OP 换取该用户的 access_token。
  • SP 利用 access_token 到 OP 去获取用户的相关信息,从而得到一个可信的身份断言,让用户登录。
  • OAuth2 协议中,用户登录成功后,OAuth2 认证服务器会将用户的浏览器回调到一个回调地址,并携带一个授权码 code。这个授权码 code 一般有效期十分钟且一次有效,用后作废。这避免了在前端暴露 access_token 或者用户信息的风险,access_token 的有效期都比较长,一般为 1~2 个小时。如果泄露会对用户造成一定影响。

后端收到这个 code 之后,需要使用 Client Id + Client Secret + Code 去 OAuth2 认证服务器换取用户的 access_token。在这一步,实际上 OAuth2 Server 对 OAuth Client 进行了认证,能够确保来 OAuth2 认证服务器获取 access_token 的机器是可信任的,而不是任何一个人拿到 code 之后都能来 OAuth2 认证服务器进行 code 换 token。

如果 code 被黑客获取到,如果他没有 Client Id + Client Secret 也无法使用,就算有,也要和真正的应用服务器竞争,因为 code 一次有效,用后作废,加大了攻击难度。

相反,如果不经过 code 直接返回 access_token 或用户信息,那么一旦泄露就会对用户造成影响。

实际上,Token是安全的,因为它不能被第三方修改,像是内部人员窃取用户的 Access Token 这件事情,是比较难预防的,也算是比较极端的一种情况。

在 OAuth2 协议中,用户登录成功后,OAuth2 认证服务器会将用户的浏览器回调到一个回调地址,并携带一个授权码 code。这个授权码 code 一般有效期十分钟且一次有效,用后作废。这避免了在前端暴露 access_token 或者用户信息的风险,access_token 的有效期都比较长,一般为 1~2 个小时。如果泄露会对用户造成一定影响。

整个过程,授权的目的就是获取访问令牌 access_token,有了 access_token 才能去访问用户受保护资源。但 access_token 存在时效性,当 access_token 失效了,就没有权限访问受保护资源了。那要怎么处理?首先不可能让用户重新走一遍授权流程,用户体验太差;OAuth 是这样做的,在生成访问令牌 access_token 的同时,也会生成一个刷新令牌 refresh_token,在 access_token 失效后会用 refresh_token 获取新的 access_token,注意,refresh_token 只能使用一次,使用后,授权服务会销毁refresh_token 并下发一个新的 refresh_token 给第三方应用。

所以说,解决的方式是适当限制 Access Token 的权限,比如只给内部人员短期密码,使长期未使用的 Access Token 过期失效,在某些重要的 token 上仅允许进行读取权限。

点击此处了解更多行业身份管理

「解决方案」以及「最佳实践案例」

 

文章作者

avatar

Authing 官方

0

文章总数

authing blog rqcode
关注 Authing 公众号
随时随地发现更多内容
authing blog rqcode
添加 Authing 小助手
加入 Authing 开发者大家庭
To create a perfect identity system
Online
How do you create a complete identity system?
Communicate Now
authing
Add Wecom to receive industry information
authing
authing
Download the Authing token and experience fast login authentication!
Free Trial
Online
Phone