免费注册,打造高效身份管理
博客/开发者/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 开发者大家庭
身份顾问在线解答
当前在线
如何打造完整的身份体系?
立即沟通
authing
添加企业微信,领取行业资料
authing
authing
下载 Authing 令牌,体验快速登录认证!
免费使用
在线咨询
电话咨询