OAuth2.0协议 ################# * RFC6749: https://www.rfc-editor.org/rfc/rfc6749 简介 ==== * OAuth 是一个关于授权(authorization)的开放网络标准 * OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。OAuth 是 Open Authorization 的简写。 OAuth2.0 一共分为四种授权方式:: 1. 密码模式 2. 客户端模式 3. 简化模式 4. 授权码模式 QuickLearn ========== 实例:: 有一个"云冲印"的网站,可以将用户储存在Google的照片,冲印出来 用户为了使用该服务,必须让"云冲印"读取自己储存在Google上的照片 名词:: 1. Third-party application 第三方应用程序,又称"客户端"(client),即上一节例子中的"云冲印" 2. HTTP service HTTP服务提供商,本文中简称"服务提供商",即上一节例子中的Google 3. Resource Owner 资源所有者,又称"用户"(user) 4. User Agent 用户代理,本文中就是指浏览器 5. Authorization server 认证服务器,即服务提供商专门用来处理认证的服务器(如GitHub,微信等) 6. Resource server 资源服务器,即服务提供商存放用户生成的资源的服务器(通常和授权服务器属于同一服务商) 它与认证服务器,可以是同一台服务器,也可以是不同的服务器 步骤:: A. 用户打开客户端(三方应用)以后,客户端要求用户给予授权 B. 用户同意给予客户端授权 C. 客户端使用上一步获得的授权,向认证服务器申请令牌 D. 认证服务器对客户端进行认证以后,确认无误,同意发放令牌 E. 客户端使用令牌,向资源服务器申请获取资源 F. 资源服务器确认令牌无误,同意向客户端开放资源 注:最主要是B步骤 .. figure:: https://img.zhaoweiguo.com/knowledge/images/protocols/protocol_auth2_architecture1.png :width: 80% :: +--------+ +---------------+ | |--(A)- Authorization Request ->| Resource | | | | Owner | | |<-(B)-- Authorization Grant ---| | | | +---------------+ | | | | +---------------+ | |--(C)-- Authorization Grant -->| Authorization | | Client | | Server | | |<-(D)----- Access Token -------| | | | +---------------+ | | | | +---------------+ | |--(E)----- Access Token ------>| Resource | | | | Server | | |<-(F)--- Protected Resource ---| | +--------+ +---------------+