# 授权码许可

<figure><img src="https://3484936666-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fkc3qks6b4rvNPb2C0khl%2Fuploads%2Fv9uwl2W859JT2bCW5jIo%2Ffile.excalidraw.svg?alt=media&#x26;token=19fec62a-5b2a-4d01-98dc-0dfa93a8b0a3" alt=""><figcaption></figcaption></figure>

使用**授权码（Authorization Code）许可类型**获取access token 的流程如下：

1. 在OAuth2授权服务上注册客户端应用（第三方应用）。

   在注册时需要为客户端应用提供一个唯一名称，OAuth2授权服务则为该应用生成一个密钥。同时，**在注册时还需要提供一个重定向URL用以接收OAuth2授权服务返回的授权码**。
2. 当用户尝试访问受保护资源时，会被重定向到 OAuth2 授权服务的认证页面，用户在认证页面中输入用户凭据。
3. OAuth2 授权服务在收到用户凭据后对其进行验证，如果验证通过生成授权码，并将用户重定向到客户端应用程序指定的 URL 上，该 URL 为第 1 步注册时设置的重定向 URL。

   **OAuth2服务器将授权码作为重定向 URL 的查询参数，以此来达成将授权码传给用户的目的。**
4. 重定向的 URL 指向客户端应用的一个接口，在该接口中，客户端会将授权码保存到本地，**之后在每次访问受保护资源时都会使用保存的授权码、客户端名称和密钥向 OAuth2 授权服务请求访问令牌。**
5. OAuth2授权服务对收到的信息进行验证，如果验证成功，则返回一个OAuth2访问令牌。
6. 客户端应用调用受保护资源的服务，并传递收到的 OAuth2 访问令牌。
7. 受保护资源的服务在收到携带访问令牌的请求后，会调用OAuth2授权服务以验证访问令牌。
   * 如果令牌有效，受保护资源允许用户访问。
   * 如果令牌无效，OAuth2服务返回HTTP状态码403，表示令牌无效。
