跳到主要内容

Oauth

基于理解OAuth 2.0的一些修改

OAuth中存在几个对象

  • Third-party application:第三方应用程序,本文中又称"客户端"(client)。
  • HTTP service:HTTP服务提供商,本文中简称"服务提供商"。
  • Resource Owner:资源所有者,本文中又称"用户"(user)。
  • User Agent:用户代理,本文中就是指浏览器。
  • Authorization server:认证服务器,即服务提供商专门用来处理认证的服务器。
  • Resource server:资源服务器,即服务提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。

运行流程

sequenceDiagram participant Client participant Resource Owner participant Authrization Server participant Resource Server Client->>Resource Owner: (A) Authorization Request Resource Owner->>Client: (B) Authorization Grant Client->>Authrization Server: (C) Authorization Grant Authrization Server->>Client: (D) Access Token Client->>Resource Server: (E) Access Token Resource Server->>Client: (F) Protected Resource
备注
  • A 用户打开客户端后,客户端要求给用户授权
  • B 用户同意给客户端授权
  • C 客户端使用上一步获取到的授权,向认证服务器申请令牌
  • D 认证服务器对客户端进行认证之后,确认无误,统一发放令牌
  • E 客户端使用令牌,向资源服务器申请获取资源
  • F 资源服务器确认令牌无误,同意向客户端开放资源

客户端的授权模式

  • 授权码模式(authorization code)
  • 简化模式(implicit)
  • 密码模式(resource owner password credentials)
  • 客户端模式(client credentials)

授权码模式

sequenceDiagram participant User Agent participant Client participant Resource Owner participant Authrization Server User Agent->>Authrization Server: (A) Client Identifier & Redirection URI Client->>User Agent: (A) User Agent->>Authrization Server: (B) User authenticates User Agent->>Resource Owner: (B) Authrization Server->>User Agent: (C) Authrization code User Agent->>Client: (C) Client->>Authrization Server: (D) Authorization Code & Redirection URI Authrization Server->>Client: (E) Access Token
备注
  • A 用户访问客户端,后者将前者导向认证服务器。
  • B 用户选择是否给予客户端授权。
  • C 假设用户给予授权,认证服务器将用户导向客户端事先指定的"重定向URI"(redirection URI),同时附上一个授权码。
  • D 客户端收到授权码,附上早先的"重定向URI",向认证服务器申请令牌。这一步是在客户端的后台的服务器上完成的,对用户不可见。
  • E 认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token)。

简化模式

sequenceDiagram participant User Agent participant Authrization Server participant Web Hosted Client Resource participant Client participant Resource Owner User Agent->>Authrization Server: (A) Client Identifier & Redirection URI User Agent->>Authrization Server: (B) User authenticates User Agent->>Resource Owner: (B) Authrization Server->>User Agent: (C) Redirection URI with Access Token in Fragment User Agent->>Web Hosted Client Resource: (D) Redirection URI without Fragment Web Hosted Client Resource->>User Agent: (E) Script User Agent->>User Agent: (F) User Agent->>Client: (G) Access Token
备注
  • A 客户端将用户导向认证服务器。
  • B 用户决定是否给于客户端授权。
  • C 假设用户给予授权,认证服务器将用户导向客户端指定的"重定向URI",并在URI的Hash部分包含了访问令牌。
  • D 浏览器向资源服务器发出请求,其中不包括上一步收到的Hash值。
  • E 资源服务器返回一个网页,其中包含的代码可以获取Hash值中的令牌。
  • F 浏览器执行上一步获得的脚本,提取出令牌。
  • G 浏览器将令牌发给客户端。

密码模式

sequenceDiagram participant Resource Owner participant Client participant Authrization Server Resource Owner->>Client: Resource Owner <br/> Password Credentials Client->>Authrization Server: Resource Owner <br/> Password Credentials Authrization Server->>Client: Access Token <br/> (Optional Refresh Token)
备注
  • A 用户向客户端提供用户名和密码。
  • B 客户端将用户名和密码发给认证服务器,向后者请求令牌。
  • C 认证服务器确认无误后,向客户端提供访问令牌。

客户端模式

sequenceDiagram participant Client participant Authrization Server Client->>Authrization Server: Client Authentication Authrization Server->>Client: Access Token
备注
  • A 客户端向认证服务器进行身份认证,并要求一个访问令牌。
  • B 认证服务器确认无误后,向客户端提供访问令牌。