OAuth2 Grant type - Implicit Mode

概述

有些 Web 应用是纯前端应用,没有后端。这时就不能用上面的方式了,必须将令牌储存在前端。RFC 6749 就规定了第二种方式,允许直接向前端颁发令牌。这种方式没有授权码这个中间步骤,所以称为(授权码)”隐藏式”(implicit)。

1. client发起授权请求,例如:

1
2
3
4
5
6
7
8
GET /authorization?
client_id=12345&
redirect_uri=https://client-app.com/callback&
response_type=token&
scope=openid%20profile&
state=ae13d489bd00e3c24

Host: oauth-authorization-server.com

请求包含以下参数:

  • client_id :客户端注册后获取的唯一值。
  • redirect_uri :重定向地址。
  • response_type :值为 token 表明授权方式是简化模式。
  • scope :访问数据的作用域。
  • state :当前会话的唯一值。

2. 用户登录并确认授权

3. 直接生成access token并重定向到客户端地址:

1
2
3
4
5
6
7
8
GET /callback#
access_token=z0y9x8w7v6u5&
token_type=Bearer&
expires_in=5000&
scope=openid%20profile&
state=ae13d489bd00e3c24

Host: client-app.com

重定向使用的是 # 连接参数,而不是 query 参数,这是因为浏览器对 URI 发起请求时不会携带 # 符号之后的数据,使用 # 也是安全方面的考虑。

4. 客户端调用 API 请求资源。

5. 资源服务器响应。