OAuth2.0 概念和使用

OAuth 是什么

OAuth (Open Authorization) 是一个用于授权的开放网络标准。常用于第三方应用登录或者授权第三方应用访问服务器资源,例如很多APP 或网站会接入微信登录。

应用场景

授权登录场景

imooc 用于第三方登录,一般APP 或者网站上都有微信登录或者支付宝登录。

授权使用资源场景

百度授权

http://developer.baidu.com/wiki/index.php?title=docs/oauth/rest/file_data_apis_list

微信账户登录过程

下面以微信登录慕课网站为例了解OAuth 工作流程

工作原理

OAuth 名词

在详细讲解OAuth 2.0之前,需要了解几个专用名词。它们对读懂后面的讲解,尤其是几张图,至关重要。

(1) Third-party application:第三方应用程序,本文中又称”客户端”(client),即上一节例子中的”云冲印”。

(2)HTTP service:HTTP服务提供商,本文中简称”服务提供商”,即上一节例子中的Google。

(3)Resource Owner:资源所有者,本文中又称”用户”(user)。

(4)User Agent:用户代理,本文中就是指浏览器。

(5)Authorization server:认证服务器,即服务提供商专门用来处理认证的服务器。

(6)Resource server:资源服务器,即服务提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。

OAuth 授权过程

OAuth 2.0的运行流程如下图,摘自RFC 6749。

OAuth运行流程

(A)用户打开客户端以后,客户端要求用户给予授权。

(B)用户同意给予客户端授权。

(C)客户端使用上一步获得的授权,向认证服务器申请令牌。

(D)认证服务器对客户端进行认证以后,确认无误,同意发放令牌。

(E)客户端使用令牌,向资源服务器申请获取资源。

(F)资源服务器确认令牌无误,同意向客户端开放资源。

不难看出来,上面六个步骤之中,B是关键,即用户怎样才能给于客户端授权。有了这个授权以后,客户端就可以获取令牌,进而凭令牌获取资源。

实现有3个主要步骤

第一步: 请求OAuth 登录页 获取 Request Token

Request Token URL – 未授权的令牌请求服务地址

请求登录页面时带有特定参数的 URL

第二步:用户使用账户登录并授权

redirect_uri 跳转会指定回调地址,并获取 code

第三部:获取 Access Token

User Authorization URL 用户授权的令牌请求服务地址

用户授权之后需要请求的一个带有特定参数的 URL

第四步:以 AccessToken 进行后续 API访问

AccessToken 过期刷新

Refresh Token 刷新 Access Token

User Authorization URL 请求中添加refersh token 参数

历史演进与安全问题

CSRF 攻击

  • 2007 OAuth1.0
  • 2010 OAuth2.0

参考

wiki
https://oauth.net/2/
https://en.wikipedia.org/wiki/OAuth
http://download.csdn.net/download/samxx8/8858103

rfc

https://tools.ietf.org/html/rfc6749

weixin

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316518&token=&lang=zh_CN

发表评论