前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OAuth2的定义和运行流程

OAuth2的定义和运行流程

作者头像
阿提说说
发布2022-12-02 17:19:27
8460
发布2022-12-02 17:19:27
举报
文章被收录于专栏:Java技术进阶

活动地址:CSDN21天学习挑战赛

文章目录

OAuth2 定义

开放授权(Open Authorization OAuth) 是一种资源提供商用于授权第三方应用代表资源所有者获取有限访问权限的授权机制。由于在整个授权过程中,第三方应用都无法触及用户的密码就可以获取部分资源的使用权限,所以OAuth是开放安全的。

OAuth第一个版本诞生于2007年12月,由于OAuth1.0复杂的签名逻辑以及单一的授权流程存在较大缺陷,随后推出了OAuth2.0,OAuth2.0放弃了OAuth1.0中让开发者感到痛苦的数字签名和加密方案,后面我们要讲的都是指OAuth2.01

对于OAuth,其实大家并不陌生,比如登录百度账户的时候,下面会提供QQ、新浪微博、微信的登录。当使用QQ登录的时候,会跳转到一个QQ OAuth2.0的登录窗口,登录QQ后再跳转回百度,并登录百度,从而避免在第三方网站提交QQ密码,在QQ登录窗口,右侧显示了第三方网站能够获取的权限资源,只能获取昵称、头像、性别。

从QQ授权登录机制中,我们基本可以看到OAuth认证的流程和形式。

OAuth 的运行流程

OAuth的4个重要角色:

  1. Resource Owner: 资源所有者,通常指用户
  2. Resource Server: 资源服务器,指存放用户受保护资源的服务器,通常需要通过Acess Token才能进行访问
  3. Client:客户端,指需要获取用户资源的第三方应用
  4. Authorization Server:授权服务器,用于验证资源所有者,并在验证成果之后向客户端发放相关令牌

如图3描述了4种角色的交互流程

在这里插入图片描述
在这里插入图片描述
  1. Client 客户端要求资源所有者(用户)提供授权许可
  2. 资源所有者(用户)同意向客户端提供授权许可
  3. 客户端携带用户提供的授权许可向授权服务器申请资源服务器的访问令牌
  4. 授权服务器验证客户端及其携带的授权许可,确认有效后发放访问令牌
  5. 客户端使用访问令牌向资源服务器申请资源
  6. 资源服务器验证访问令牌,确认无误后向客户端提供资源

在这个流程中,第二步OAuth定义了4种授权模式,用于将用户的授权许可提供给客户端。

授权码模式(Authorization Code)

授权码模式是功能最完整、流程最严密的授权模式,它将用户引导到授权服务器进行身份验证,授权服务器将发放的访问令牌传递给客户端。百度使用QQ账户登录就是使用的该模式,如下。

https://graph.qq.com/oauth2.0/show?which=Login&display=pc&client_id=100312028&response_type=code&redirect_uri=https%3A%2F%2Fpassport.baidu.com%2Fphoenix%2Faccount%2Fafterauth%3Fmkey%3D7a58056f35517b863aca5dd7add6a179c927361ed5803d1ff8%26tpl%3Dmn&state=1659803324&display=page&scope=get_user_info%2Cadd_share%2Cget_other_info%2Cget_fanslist%2Cget_idollist%2Cadd_idol%2Cget_simple_userinfo&traceid=

其中,response_type指授权类型,必须,固定为code client_id指客户端id,必须 state指客户端的状态,通常在授权服务器重定向时原样返回 scope为申请的权限范围,如获取用户信息、获取用户相册等,由授权服务器抽象为具体的条目 redirect_uri为授权通过后的重定向URL,授权服务器将在用户登录完成之后重定向到该地址。

在这里插入图片描述
在这里插入图片描述

隐式授权模式(Implicit)

隐式授权模式的客户端一般指用户浏览器。访问令牌通过重定向的方式传递到用户浏览器中,再通过浏览器的JavaScript代码来获取访问令牌。由于访问令牌直接暴露在浏览器端,所以隐式授权模式可能会导致范围令牌被泄露,仅适用于需要临时访问的场景与授权码模式相比,用户的登录环节是一样的,只是在授权成功之后的重定向,授权码模式是携带一个认证码,由客户端通过认证码申请访问令牌,而隐式授权模式则直接将访问令牌作为URL参数传递给浏览器。 隐式授权模式在重定向时携带的参数有: access_token:访问令牌 expire_in:访问令牌多少秒后过期 state:客户端的状态参数

在这里插入图片描述
在这里插入图片描述

密码授权模式(Password Credentials)

客户端携带用户的密码向授权服务器申请令牌,这种操作不再像前两种一样跳转到授权服务器进行,而是由客户端提供专用页面。

在这里插入图片描述
在这里插入图片描述

客户端授权模式(Client Credentials)

客户端授权模式通常由客户端提前向授权服务器申请公钥、秘钥,并通过这些关键信息向授权服务器申请访问令牌,从而得到资源服务器提供的资源。 ​

在这里插入图片描述
在这里插入图片描述

关于OAuth2的定义和运行流程先讲到这里,下篇将在Spring Security中使用OAuth2。


  1. RFC6749:https://www.rfc-editor.org/rfc/rfc6749.html ↩︎
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • OAuth2 定义
  • OAuth 的运行流程
    • 授权码模式(Authorization Code)
      • 隐式授权模式(Implicit)
        • 密码授权模式(Password Credentials)
          • 客户端授权模式(Client Credentials)
          相关产品与服务
          访问管理
          访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档