OAuth2.0
OAuth 2.0
什么是OAuth
开放授权(OAuth)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。
OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth让用户可以授权第三方网站访问他们存储在另外服务提供者的某些特定信息,而非所有内容。
OAuth 2.0是OAuth协议的下一版本,但不向下兼容OAuth 1.0。OAuth 2.0关注客户端开发者的简易性,同时为Web应用、桌面应用、手机和智能设备提供专门的认证流程。
工作原理
RFC: RFC 6749 - The OAuth 2.0 Authorization Framework (ietf.org)
推荐:
在传统CS授权模型中,client向server请求一个拥有访问限制的资源时,server端会验证client是否是资源的拥有者(resource owner)。在这种模型中,如果用户想给第三方开放受限资源,用户会将自己resource owner的身份共享给第三方。此时第三方会获得用户在server上所有资源的访问权限(而不仅是用户想开发的资源,就相当于用户自己登录了server)。同时由于用户和所有第三方都通过相同的身份登录server(所有client都是同一个身份),用户无法单独撤销某个第三方的身份授权(用户改密码后其他第三方授权也均失效)。
OAuth通过引入一个授权层来将client(访问者)和resource owner(资源拥有者-用户)分开,在Oauth中访问者拥有和资源拥有者不同的身份。
例子:一个用户(resource owner)给一个打印服务(client)授权访问其在一个照片分享服务器(resource server)上的照片,用户不直接将其账号密码交给打印服务,而是授权一个被照片分享服务信任的授权服务器(authorization server),由授权服务器给打印服务生成一个标注了权限范围、生命周期等信息的访问token,打印服务通过该token来访问照片分享服务器上的资源。
- 授权服务器和资源服务器之间的互动不在Oauth标准中,授权服务器和资源服务器可以是同一服务器和不同的实体。
- A步骤可以是client直接向resource owner发起,也可以是由authorization server代发起(更推荐后者)
更详细的流程图(由athorization server代client发起request)