Skip to content

Commit a66c1e6

Browse files
committed
feat(oauth/device-authorization-grant): refresh access token
1 parent 0237b2e commit a66c1e6

File tree

1 file changed

+49
-4
lines changed

1 file changed

+49
-4
lines changed

docs/advanced/oauth2/device-authorization-grant.md

Lines changed: 49 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -141,14 +141,11 @@ Content-Type: application/json
141141
| `token_type` | string | 访问令牌类型,固定值 Bearer |
142142
| `expires_in` | number | 访问令牌的有效期,单位为秒 |
143143
| `access_token` | string | 访问令牌 |
144+
| `refresh_token` | string | 刷新令牌,仅在申请了 `offline_access` 权限的情况下包含 |
144145
| `id_token` | string | OpenID Connect 的 ID 令牌,仅在申请了 `openid` 权限的情况下包含 |
145146

146147
至此即完成了设备代码流的所有流程,成功获取到了访问令牌。
147148

148-
> [!WARNING] 不支持刷新令牌
149-
>
150-
> 设备代码流目前不支持刷新令牌。如需延长授权的有效期,请重新请求用户授权。
151-
152149
### 关于 ID 令牌
153150

154151
ID 令牌(ID Token)是 OpenID Connect 规范的内容。OpenID Connect 是由 OpenID Foundation 提出的一种基于 OAuth 2.0 的用户身份验证协议。若要了解更多关于 OpenID Connect 的信息,请访问 [OpenID 官网](https://openid.net)
@@ -179,6 +176,54 @@ LittleSkin 部分实现了 OpenID Connect Discovery。ID 令牌中的 `iss` 声
179176
> [!WARNING] ID 令牌的签名算法
180177
> 除 RS256 外,LittleSkin 还可能会使用 PS256、ES256 和 EdDSA 算法对 ID 令牌进行签名。在验证 ID 令牌之前,请确定你使用的 JWT 库支持这些算法。
181178
179+
## 刷新访问令牌
180+
181+
为了延长单次授权的有效期,可在访问令牌有效期及过期后一段时间内使用刷新令牌请求刷新访问令牌,以获取一个新的访问令牌。
182+
183+
> [!TIP] 需要单独申请权限
184+
> 若要获取刷新令牌,则必须在 [请求设备代码对](#请求设备代码对) 时申请 `offline_access` 权限。
185+
186+
```http
187+
POST https://open.littleskin.cn/oauth/token HTTP/1.1
188+
Accept: application/json
189+
Content-Type: application/x-www-form-urlencoded
190+
191+
grant_type=refresh_token&
192+
refresh_token={{refresh_token}}&
193+
client_id={{client_id}}&
194+
client_secret={{client_secret}}&
195+
```
196+
197+
| 参数 ||
198+
| --------------- | ---------------------- |
199+
| `grant_type` | 固定值 `refresh_token` |
200+
| `refresh_token` | 先前获取到的刷新令牌 |
201+
| `client_id` | ... |
202+
203+
如果请求成功,将返回如下响应:
204+
205+
```http
206+
HTTP/1.1 200 OK
207+
Content-Type: application/json
208+
209+
{
210+
"token_type": "Bearer",
211+
"expires_in": 259200,
212+
"access_token": "******",
213+
"refresh_token": "******"
214+
}
215+
```
216+
217+
| 参数 | 类型 ||
218+
| --------------- | ------ | ------------------------- |
219+
| `token_type` | string | 访问令牌类型,固定值 Bearer |
220+
| `expires_in` | number | 访问令牌的有效期,单位为秒 |
221+
| `access_token` | string | 访问令牌 |
222+
| `refresh_token` | string | 刷新令牌,仅在申请了 `offline_access` 权限的情况下包含 |
223+
| `id_token` | string | OpenID Connect 的 ID 令牌,仅在申请了 `openid` 权限的情况下包含 |
224+
225+
访问令牌刷新后,原先的访问令牌和刷新令牌将立即失效,之后所有的 API 请求都必须使用新的访问令牌。
226+
182227
## 错误响应
183228

184229
[授权代码流 - 错误响应 - 错误类型](./authorization-code-grant.md#错误类型) 中提到的错误类型外,设备代码流还可能返回以下错误:

0 commit comments

Comments
 (0)