OAuth的解释

就是对第三方应用的授权机制,使其获取用户的数据

数据所有者收到第三方请求授权后,告诉系统通过第三方应用的请求,系统就会自动生成一个令牌(token),用来替代密码,供第三方应用使用。

令牌的特点

是短期有效的。因为获取了令牌就相当于获取了密码,所以需要保证安全性,用户也不能进行更改。

令牌可以被数据所有者撤销,立即失效。

令牌是有权限范围的,并不是获取了令牌就可以代替密码使用。

 

而数据所有者向第三方应用颁发令牌有四种方式,无论哪种方式,客户端申请权限之前,都必须到系统备案,说明自己的身份,然后会获取两个身份识别码:客户端ID(client ID)和客户端密钥(client password)

第一种授权方式:识别码

第三方应用先申请一个授权码,再通过授权码请求令牌。这种方式安全性最高,适用于有后端的Web应用。授权码通过前端发送,而令牌储存在后端,而且所有与资源服务器的通信都在后端完成。

第一步:A网站提供一个链接,用户点击后就会跳转到B网站。此时A网站的请求参数有response_type=code,表示以要求返回授权码。client_id用来向网站B标明身份,redirect_url表示网站B接收或拒绝后跳转的页面,scope表示授权范围

第二步:用户跳转后,B网站会要求用户登录,然后询问是否同意给A网站授权,同意后会跳转到指定的地址,并带上授权码

第三步:A网站拿到授权码后,就可以在后端,向B网站请求令牌 参数中的client_id和client_secret用来标明身份,grant_type值为AUTHORIZATION_CODE,表示请求授权的是授权码,code为授权码,redirect_url是返回令牌跳转的地址

第四步:B网站接受请求后,就会颁发令牌,方法就是向返回的URL上发送json格式的数据。其中aceess_token就是令牌

第二种授权方式:隐藏式

有的应用没有后端,就只能将令牌储存在前端

第一步:网站A提供一个链接,要求用户跳转到网站B,授权令牌给网站A使用。参数中response_type为token,表示直接返回令牌,redirect_url表示同意后的跳转地址

第二步:网站B接受请求,跳转到之前指定的URL,并在参数中带上令牌。

注意:令牌是URL的锚点而不是查询字符串,不会发送到服务器,减小泄露的可能

第三种授权方式:密码式

如果高度信任某应用,可以将用户名和密码直接告诉该应用,该应用通过其请求令牌

第一步:A网站要求用户提供B网站的用户名和密码,直接通过用户名和密码请求令牌。参数中grant_type为password,表示为密码式,username和password分别是B 的用户名和密码。

第二步:B网站验证身份通过后,直接将令牌当做json数据,放在http响应中返回

第四种方式:凭证式

适用于没有前端的命令行应用,

第一步:A应用在命令行上向B网站发送请求。参数中grant_type为client_credentials表示采用凭证式,client_id和client_secret用来标明身份

第二步:B网站验证身份后向A应用返回令牌

这种方式给出的令牌是针对应用的,而不是某个用户,因此可能有多个用户使用该令牌

 

posted @ 2020-04-29 20:20  ashen1999  阅读(376)  评论(0编辑  收藏  举报