【权限】OAuth2入门

什么是OAuth2

一、定义

OAuth2是开放授权的一个标准,旨在让用户允许第三方应用去访问用户在某服务器中特定的私有资源,而可以不提供在某服务器的账号密码给到第三方应用。

OAuth2可以分为四个角色:
Resource Owner:资源所有者 类似用户
Resource Server:资源服务器 保存/提供用户的私有资源信息的服务器
Client:第三方应用客户端 想获取用户私有资源信息的应用
Authorication Server:授权服务器,管理前三者的中间层

OAuth2解决问题的关键在于使用授权服务器提供一个访问凭据给第三方应用,让第三方应用可以在不知道资源所有者在资源服务器上的账号密码的情况下,能获取到资源所有者在资源服务器上的受保护的私有资源,如用户姓名、头像、电话等信息

OAuth 2.0的一般流程如下图:
在这里插入图片描述

从上到下依次执行

(1)用户打开客户端以后,客户端要求用户给予授权。
(2)用户同意给予客户端授权。
(3)客户端使用上一步获得的授权,向认证服务器申请令牌。
(4)认证服务器对客户端进行认证以后,确认无误,同意发放令牌。
(5)客户端使用令牌,向资源服务器申请获取资源。
(6)资源服务器确认令牌无误,同意向客户端开放资

二、授权模式

1、授权码模式(authorization code)
①用户访问客户端,客户端将用户导向认证服务器,假设用户给予授权,认证服务器将用户向客户端事先制定的重定向URI,同时附上一个授权码
②客户端收到授权码,附上早先的重定向URI,向认证服务器申请令牌:GET/oauth/token?res
ponse_type=code&client_id=test&redirect_uri=重定向页面链接。请求成功返回code授权码,一般有效时间是10分钟。
③认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token)
POST/oauth/tokenresponse_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA&redirect_uri=重定向页面链接。
在这里插入图片描述

2、简化模式(implictit)。
简化模式(implicit grant type)不通过第三方应用程序的服务器,直接在浏览器中向认证服务器申请令牌,跳过了"授权码"这个步骤,因此得名。所有步骤在浏览器中完成,令牌对访问者是可见的,且客户端不需要认证。
①、客户端将用户导向认证服务器
②、用户决定是否给于客户端授权
③、假设用户给予授权,认证服务器将用户导向客户端指定的"重定向URI",并在URI的Hash部分包含了访问令牌。
④、浏览器向资源服务器发出请求,其中不包括上一步收到的Hash值。
⑤、资源服务器返回一个网页,其中包含的代码可以获取Hash值中的令牌。
⑥、浏览器执行上一步获得的脚本,提取出令牌。
⑦、浏览器将令牌发给客户端。
在这里插入图片描述

3、密码模式(resource owner password credentials)

①、用户向客户端提供用户名和密码。
②、客户端将用户名和密码发给认证服务器,向后者请求令牌。
③、认证服务器确认无误后,向客户端提供访问令牌。
在这里插入图片描述

4、客户端模式(client credentials)

①、客户端向认证服务器进行身份认证,并要求一个访问令牌。
②、认证服务器确认无误后,向客户端提供访问令牌。

在这里插入图片描述

1、实例
2、服务端例子
3、客户端例子

猜你喜欢

转载自blog.csdn.net/thesprit/article/details/112648155