简单说,OAuth 就是一种授权机制。数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用。
首先,让我们先看看
底层协议:
OAUTH协议为用户资源的许可证提供了安全、开放、简单的标准。 与传统的授权方法不同,OAUTH授权可防止第三方接触用户的凭据(例如用户名和密码)。 这意味着OAUTH是安全的,因为第三方可以在不使用用户用户名和密码的情况下申请批准该用户资源。 oAuth是开放授权的缩写。
相关的术语
一、三个URL:
获取请求主题URL :错误的请求主题服务地址; 用户授权URL :获取用户批准的请求令牌服务地址。 访问密钥URL :交换授权请求密钥和访问密钥的服务地址;二、参数定义:
4. OAUTH_consumer_key:用户的ID,OAUTH服务的直接用户是开发者开发的APP应用。 因此,获取此参数值通常需要向OAUTH服务提供商注册APP应用程序,然后获取该APP应用程序的OAUTH_consumer_key。
5 .与oauth _ consumer _ secret:oauth _ consumer _ key相对应的键。
6. OAUTH_token:OAUTH进入最后一步获得的“令牌”。 此“令牌”请求允许您访问拥有资源的站点,并捕获拥有权限的资源。
7 .与oauth _ token _ secret : oauth _ token相对应的私钥。
8. OAUTH_signature_method:请求字符串的签名方法必须在APP每次向OAUTH的三个服务地址发送请求时对请求签名。 有三种签名方法: HMAC-SHA1、RSA-SHA1和PLAINTEXT。
9. OAUTH_signature:使用上述签名方法对请求签名。
10. OAUTH_timestamp:开始请求的时间戳。 该值必须是自1970 00:00:00 GMT以来的秒数,并且必须是大于0的整数。 此次请求的时间戳必须大于或等于上次的时间戳。
11. OAUTH_nonce:随机生成的字符串。 用于防止要求重复,防止外部非法攻击。
12. OAUTH_version: OAUTH的版本号。
三、响应代码
13.http 400带宽请求错误
14 .不支持参数错误
15 .不支持的签名方法错误
16 .缺少所需的参数
17 .重复duplicatedoauthprotocolparameter参数
18.http 401未授权
19. Invalid Consumer Key非法key
20 .无效或非法的token
21. Invalid signature的签名无效
22. Invalid/used nonce不正确的nonce
四、认证流程:
1. 获取未授权的request token
请求参数:
OAUTH_consumer_key:消费者键值。
OAUTH_signature_method:用于消费者签名本请求的签名方法。
OAUTH_signature:签名在签名请求(签名请求)中定义。
OAUTH_timestamp:由Nonceand Timestamp (主值和时间戳)定义。
OAUTH_nonce:由nonceandtimestamp(1 (一次值和时间戳)定义。
OAUTH_version:是可选的。
附加参数:通过服务提供幸福毛皮虾的附加参数
服务器端返回结果,并且响应包含以下参数:
OAUTH_token:请求令牌
OAUTH_token_secret:令牌密钥
附加参数:通过服务器提供幸福毛皮虾的任意参数。
2. 获取用户授权的request token
请求参数:
OAUTH_token:是可选的。 在上述步骤中获取的请求令牌。 服务提供商可以声明此参数是必需的,也可以要求用户手动输入,而不将其包含在授权的URL中。
OAUTH_callback:是可选的。 消费者可以指定URL,如果成功得到用户的批准(得到用户的批准),服务提供商将用户重定向到此URL。
附加参数:通过服务器提供幸福毛皮虾的任意参数。
服务提供者将用户引导至消费者。
消费者方面
在OAUTH_callback中提供了回调URL(在消费方引导用户至服务提供方 (消费方引导用户至服务提供方)中描述),则服务提供方构造一个HTTP GET请求URL,重定向用户浏览器到该URL,并包含如下参数:(1) OAUTH_token:被用户授权或否决的请求令牌
(2) 回调URL可以包含消费方提供的查询参数,服务提供方必须保持已有查询不变并追加OAUTH_token参数。
3. 用授权的request token换取Access Token
消费方请求访问令牌参数:
OAUTH_consumer_key:消费方键值。
OAUTH_token:之前获取的请求令牌。
OAUTH_signature_method:消费方使用的签署方法。
OAUTH_signature:签署请求 (签署请求)中定义的签名。
OAUTH_timestamp:在单次值与时间戳 (单次值与时间戳)中定义。
OAUTH_nonce:在单次值与时间戳 (单次值与时间戳)中定义。
OAUTH_version:版本号,可选。
返回参数:
OAUTH_token:访问令牌。
OAUTH_token_secret:令牌密钥。
4. 访问受保护资源
请求参数:
OAUTH_consumer_key:消费方键值。
OAUTH_token:访问令牌。
OAUTH_signature_method:消费方使用的签署方法。
OAUTH_signature:签署请求 (签署请求)中定义的签名。
OAUTH_timestamp:定义于单次值与时间戳 (单次值与时间戳).
OAUTH_nonce:定义于单次值与时间戳 (单次值与时间戳).
OAUTH_version:版本号,可选。
附加参数:服务提供方指定的附加参数。
授权流程:
OAUTH认证授权就三个步骤,三句话可以概括:
1. 获取未授权的Request Token
2. 获取用户授权的Request Token
3. 用授权的Request Token换取Access Token
当应用拿到Access Token后,就可以有权访问用户授权的资源了。大家可能看出来了,这三个步骤不就是对应OAUTH的三个URL服务地址嘛。一点没错,上面的三个步骤中,每个步骤分别请求一个URL,并且收到相关信息,并且拿到上步的相关信息去请求接下来的URL直到拿到Access Token。
具体每步执行信息如下:
使用者(第三方软件)向OAUTH服务提供商请求未授权的Request Token。向Request Token URL发起请求。(请求需要带上参数,前面说过)
OAUTH服务提供商同意使用者的请求,并向其颁发未经用户授权的oauth_token与对应的oauth_token_secret,并返回给使用者。
使用者向OAUTH服务提供商请求用户授权的Request Token。向User Authorization URL发起请求,请求带上上步拿到的未授权的token与其密钥。
OAUTH服务提供商将引导用户授权。该过程可能会提示用户,你想将哪些受保护的资源授权给该应用。此步可能会返回授权的Request Token也可能不返回。如Yahoo OAUTH就不会返回任何信息给使用者。
Request Token 授权后,使用者将向Access Token URL发起请求,将上步授权的Request Token换取成Access Token。请求的参数见上图,这个比第一步A多了一个参数就是Request Token。
OAUTH服务提供商同意使用者的请求,并向其颁发Access Token与对应的密钥,并返回给使用者。
使用者以后就可以使用上步返回的Access Token访问用户授权的资源。
具体实现示例,请看我另一篇文章,保证看了不会后悔!
https://blog.csdn.net/weixin_43885417/article/details/105102144