# Token 傳遞

本頁說明套件從請求哪裡讀取 Token、把新 Token 寫到哪裡，以及 cookie 的屬性。

## 讀取順序

| 值 | 優先 | 次之 |
|---|---|---|
| Access Token | `authorization: Bearer <token>` header | cookie `AccessTokenCookieKey`（預設 `access_token`） |
| Refresh ID | `X-Refresh-ID` header | cookie `RefreshTokenCookieKey`（預設 `refresh_id`） |
| Device ID | `X-Device-ID` header | `req.body.deviceId` |

cookie 從 `req.cookies` 讀取，需要先掛 `cookie-parser`。

## 寫回位置

| 時機 | 寫回 |
|---|---|
| `CreateJWT()` | Access cookie、Refresh cookie；回傳值 `{ token, refresh_id }` |
| `VerifyJWT()` 續期時 | Access cookie、Refresh cookie、`X-New-Access-Token`、`X-New-Refresh-ID` |
| `RevokeJWT()` | 清除兩個 cookie |

## Cookie 屬性

| 屬性 | `isProd: true` | `isProd: false` |
|---|---|---|
| `httpOnly` | `true` | `true` |
| `secure` | `true` | `false` |
| `sameSite` | `none` | `lax` |
| `domain` | `config.domain` | `localhost` |
| `path` | `/` | `/` |
| 壽命 | Access：`accessTokenExpires`；Refresh：`refreshTokenExpires` | 同左 |

相關：[客戶端整合](/zh/client-integration)、[設定](/zh/configuration)
