OAuth研究

一.OAuth protocol介绍

   An  open protocol to allow secure API authorization in a simple and standard method from desktop and web applications.

  OAuth授权在各社交网站中广泛使用,该协议使用户不需要直接向第三方应用提供用户名及密码,并且使一个账户在多个网站中使用成为可能。

  OAuth协议中包含了三个角色:

  Service Provider,即服务提供者,如新浪微博

 User,即普通用户,如新浪微博用户

Consumer,即第三方应用,如本人开发的应用。

二.   三者之间原来的业务需求:User 想利用Consumer来更新自己在Service provider中的状态,常规的思想是:User可以将自己的username和password传递给Consumer,Consumer拿着User的username和password想Service Provider提出更新请求即可。但是由于涉及到第三应用Consumer,为了安全起见,User利用Consumer更新自己在Service Provider中的状态时,不能将自己的username和password传递给第三方应用Consumer,这种情况下,Service Provider并不信任Consumer,于是三者之间必须建立起信任关系。

  解决方案:Consumer首先向Service Provider 申请一对Consumer_Key和Consumer_Secret,以此取得Service Provider的信任。因为User是信任Service Provider,所以User与Consumer间的信任关系就依靠Service Provider建立了。Consumer用自己的Consumer_Key和Consumer_Secret向Service Provider请求到一对Request_Token和Request_Token_Secret,而后Consumer拿上这对RequestToken,领着User去见Service Provider。Service Provider见到自己发的RequestToken,便确认Consumer是值得信任的,于是把头转向User。如果Service Provider不记得User了,只要User想Service Provider提供username和password,就能建立起信任关系,然后Service Provider对User说:“我很信任这个Consumer,你是不是也要信任她?”若User确认,则Service Provider允许Consumer把User带回去,并发给Consumer一个Verifier。回来以后呀,Consumer拿着RequestToken和Verifier又单独去找Service Provider,取回来一对Access_Token和Access_Token_Secret,并长期保存。至此,三方信任关系就建立起来了,Consumer每次在Service Provider中更新User的状态时,只需要提供这对AccessToken,Service Provider便能确定此Consumer能代替User进行相应的操作。

OAuth进行开发时,所需要的关键字在上面场景中都有体现:Consumer_Key,Consumer_Secret,Request_Token,Request_Token_Secret,Verifier,Access_Token,Access_Token_Secret。

三.新浪微博开放平台OAuth授权接口

  oauth/request_token:consumer使用该接口向Service Provider索取RequestToken

 oauth/authorize:Consumer带上RequestToken,领着User,三者见面

oauth/access_Token:Consumer拿着Request_Token和Verifier,再次向Service Provider索取AccessToken


四.

具体每步执行信息如下:

A. 使用者(第三方软件)向OAUTH服务提供商请求未授权的RequestToken。向Request Token URL发起请求,请求需要带上的参数见上图。

B. OAUTH服务提供商同意使用者的请求,并向其颁发未经用户授权的oauth_token与对应的oauth_token_secret,并返回给使用者。

C. 使用者向OAUTH服务提供商请求用户授权的RequestToken。向User Authorization URL发起请求,请求带上上步拿到的未授权的token与其密钥。

D. OAUTH服务提供商将引导用户授权。该过程可能会提示用户,你想将哪些受保护的资源授权给该应用。此步可能会返回授权的Request Token也可能不返回。如Yahoo OAUTH就不会返回任何信息给使用者。

E. Request Token 授权后,使用者将向Access Token URL发起请求,将上步授权的Request Token换取成Access Token。请求的参数见上图,这个比第一步A多了一个参数就是Request Token

F. OAUTH服务提供商同意使用者的请求,并向其颁发Access Token与对应的密钥,并返回给使用者。

G. 使用者以后就可以使用上步返回的Access Token访问用户授权的资源。



03-08
### OAuth 协议详解 OAuth 是一种开放标准的授权协议或框架,提供了用户允许一个网站或应用访问其他网站上存储的信息的方法,而不需要将用户名和密码交给第三方。该协议为用户授权和资源访问提供了一种安全可靠的机制[^2]。 #### 安全特性 OAuth 不涉及用户的密码传递给第三方,而是通过授权服务器颁发访问令牌来实现权限授予过程。这种方式不仅提高了安全性还增加了灵活性,因为即使令牌泄露也不会影响到原始账号的安全性[^1]。 #### 开放性和易用性 作为开放式标准,任何服务提供商都能实施OAuth,同样地,任意软件开发商也可以轻松集成此协议用于自己的产品中。这种设计降低了接入门槛并促进了广泛应用的可能性。 ### 应用场景分析 研究显示,在多个领域内合理运用OAuth 2.0 可以为实际项目带来显著优势: - **提升用户账户安全性**:借助于间接的身份验证流程,有效防止敏感信息外泄风险; - **简化第三方应用开发**:遵循统一规范减少了接口对接难度,加速了产品研发周期; - **促进数据共享与协作**:打破平台壁垒,让用户能够便捷地在多平台上同步个人资料或其他重要文档; - **支持SaaS/PaaS架构下的跨平台交互**:确保云端服务之间顺畅沟通的同时保障信息安全传输[^3]。 此外,为了适应更多样化的业务需求,OAuth 2.0 还引入了一些额外的功能模块,比如客户端管理和令牌刷新等,进一步增强了系统的可扩展性和鲁棒性[^4]。 ```python import requests def get_user_info(access_token, api_endpoint): headers = {'Authorization': f'Bearer {access_token}'} response = requests.get(api_endpoint, headers=headers) if response.status_code == 200: return response.json() else: raise Exception('Failed to fetch user info') # Example usage of the function with a valid access token and endpoint URL. try: userinfo = get_user_info('example_access_token', 'https://api.example.com/userinfo') except Exception as e: print(e) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值