本文主要介紹 Token 產生和擷取相關方法。
如何擷取 token?
token 的擷取可以有多種方案,根據應用類型,具體擷取方法請看:應用概述。
本篇所有方法均為擷取 Token 相關方法,建構函式傳參 api_endpoint 即可:
const client = new PDSClient({
api_endpoint: `https://${domain_id}.api.aliyunpds.com`
})請求參數中的 options: IPDSRequestConfig 基於 axios 的 request config 封裝,詳情請看:AxiosRequestConfig。
getUserJwtToken 方法
此為使用 JWT 快速接入 PDS 時用來擷取使用者token的方法。
首先需要在 PDS 控制台建立 JWT 應用,配置好公開金鑰,擷取到私密金鑰。然後使用 JWT 應用ID和私密金鑰來擷取使用者 Token。
注意:此方法僅 node.js 適用。
const result = await client.getUserJwtToken(params, options)舉例
const domain_id = '您的DomainID'
const client_id = '您的JWT應用ID'
const privary_key_pem = '您的私密金鑰'
const user_id = '要擷取token的使用者ID'
const client = new PDSClient({
api_endpoint: `https://${domain_id}.api.aliyunpds.com`
})
const params = {
domain_id,
client_id,
private_Key_pem,
user_id,
auto_create: false, // 沒有該使用者是否自動建立
}
const jwtToken = await client.getUserJwtToken(params)參數說明
欄位 | 類型 | 必選 | 說明 |
params | IGetUserJwtTokenReq | 是 | 參數。 |
options | IPDSRequestConfig | 其他可選配置。 |
IGetUserJwtTokenReq
欄位 | 類型 | 必選 | 說明 |
client_id | string | 是 | JWT應用ID。 |
private_key_pem | string | 是 | 私密金鑰 pem 字串。 |
domain_id | string | 是 | DomainID。 |
user_id | string | 是 | 使用者唯一標識,由接入方保證其在Domain層級的唯一性。 |
auto_create | boolean | 沒有該使用者時是否自動建立,如果domain 上配置了初始化雲端硬碟,自動建立使用者時還會自動為使用者建立初始化雲端硬碟。預設 false。 |
返回
欄位 | 類型 | 必選 | 說明 |
result | ITokenInfo | 是 | 代表使用者身份的token |
ITokenInfo
欄位 | 類型 | 必須 | 說明 |
access_token | string | 是 | 代表使用者身份的 |
refresh_token | string | 重新整理 | |
expire_time | string |
| |
expires_in | string |
| |
token_type | string |
| |
user_id | string | 目前使用者唯一標識。 | |
role | string | 目前使用者角色。 | |
...其他欄位 | 其他欄位請看Token。 |
ITokenInfo舉例
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cC******AKBkbYjejHYX3d42VzSZ70",
"refresh_token": "a5a1ebadaba6*****27f4122",
"expires_in": 7200,
"token_type": "Bearer",
"user_id": "4b14efc*****6f63740",
"user_name": "使用者1",
"avatar": "",
"nick_name": "使用者1",
"default_drive_id": "1",
"role": "user",
"status": "enabled",
"expire_time": "2022-02-16T07:59:14Z",
"is_first_login": false,
"domain_id": "daily21453"
}getServiceJwtToken 方法
此方法用於擷取 Domain 的服務帳號的 Token。該 Token 擁有超級管理員權限,一般用來做營運管理操作。
注意:此方法僅 node.js 適用。
const result = await client.getServiceJwtToken(params, options)舉例
const domain_id = '您的DomainID'
const client_id = '您的JWT應用ID'
const privary_key_pem = '您的私密金鑰'
const client = new PDSClient({
api_endpoint: `https://${domain_id}.api.aliyunpds.com`
})
const params = {
domain_id,
client_id,
private_Key_pem,
}
const jwtToken = await client.getServiceJwtToken(params)參數說明
欄位 | 類型 | 必選 | 說明 |
params | IGetServiceJwtTokenReq | 是 | 參數。 |
options | IPDSRequestConfig | 其他可選配置。 |
IGetServiceJwtTokenReq
欄位 | 類型 | 必選 | 說明 |
client_id | string | 是 | JWT應用ID。 |
private_key_pem | string | 是 | 私密金鑰 pem 字串。 |
domain_id | string | 是 | DomainID。 |
返回
欄位 | 類型 | 必選 | 說明 |
result | ITokenInfo | 是 | 代表Domain超級管理員身份的服務帳號的token |
refreshJwtToken 方法
此方法可以用來刷下JwtToken。
jwtTokenInfo 中的 access_token 的有效期間為2小時, refresh_token 的有效期間為7天。
在refresh_token的有效期間內,無論 access_token 是否到期,都可以調用此方法來擷取新的 token。
重新整理 jwtTokenInfo 會返回新的 jwtTokenInfo,舊的 jwtTokenInfo 會失效。
const result = await client.refreshJwtToken(params, options)舉例
const client_id = '您的JWT應用ID'
const client = new PDSClient({
api_endpoint: `https://${domain_id}.api.aliyunpds.com`
})
const params = {
client_id,
refresh_token: 'xxxxxxx',
}
const jwtToken = await client.refreshJwtToken(params)參數說明
欄位 | 類型 | 必選 | 說明 |
params | IRefreshJwtTokenReq | 是 | 參數。 |
options | IPDSRequestConfig | 其他可選配置。 |
IRefreshJwtTokenReq
欄位 | 類型 | 必選 | 說明 |
client_id | string | 是 | JWT應用ID。 |
refresh_token | string | 是 | 為到期的 jwtToken中的refresh_token。 |
返回
欄位 | 類型 | 必選 | 說明 |
result | ITokenInfo | 是 | 重新整理後的 jwtToken。 |
getTokenByCode 方法
此方法可以根據 OAuth 流程中得到的一次性 code,來換取使用者 Token。
關於OAuth流程請看: 擷取 OAuth2.0 Access Token 步驟
const result = await client.getTokenByCode(params, options)舉例
const client_id = '您的OAuth應用ID'
const client_secret = '您的OAuth應用密鑰'
const redirect_uri = '您的OAuth應用回調地址'
const client = new PDSClient({
api_endpoint: `https://${domain_id}.api.aliyunpds.com`
});
const params = {
client_id,
client_secret,
redirect_uri,
code: 'xxxxxxx', // OAuth應用流程中得到的一次性code
};
const token = await client.getTokenByCode(params)參數說明
欄位 | 類型 | 必選 | 說明 |
params | IGetTokenByCodeReq | 是 | 參數。 |
options | IPDSRequestConfig | 其他可選配置。 |
IGetTokenByCodeReq
欄位 | 類型 | 必選 | 說明 |
client_id | string | 是 | OAuth應用ID。 |
client_secret | string | OAuth應用Secret。 webserver類型的應用必選。 | |
redirect_url | string | 是 | OAuth應用回調地址 |
code | string | 是 | OAuth應用流程中得到的一次性code |
返回
欄位 | 類型 | 必選 | 說明 |
result | ITokenInfo | 是 | 代表使用者身份的token |
refreshToken 方法
此方法可以用來重新整理 OAuth 流程擷取的 tokenInfo。
tokenInfo 中的 access_token 的有效期間為2小時, refresh_token 的有效期間為7天。
在refresh_token的有效期間內,無論 access_token 是否到期,都可以調用此方法來擷取新的 token。
重新整理 tokenInfo 會返回新的 tokenInfo,舊的 tokenInfo 會失效。
const result = await client.refreshToken(params, options)舉例:
const client_id = '您的OAuth應用ID'
const client_secret = '您的OAuth應用密鑰'
const redirect_uri = '您的OAuth應用回調地址'
const client = new PDSClient({
api_endpoint: `https://${domain_id}.api.aliyunpds.com`
})
const params = {
client_id,
client_secret,
redirect_uri,
refresh_token: 'xxxxxxx'
}
const token = await client.refreshToken(params)參數說明
欄位 | 類型 | 必選 | 說明 |
params | IRefreshTokenReq | 是 | 參數。 |
options | IPDSRequestConfig | 其他可選配置。 |
IRefreshTokenReq
欄位 | 類型 | 必選 | 說明 |
client_id | string | 是 | OAuth應用ID。 |
client_secret | string | OAuth應用Secret。 webserver類型的應用必選。 | |
redirect_url | string | 是 | OAuth應用回調地址。 |
refresh_token | string | 是 | 到期的tokenInfo中的refresh_token。 |
結果
欄位 | 類型 | 必選 | 說明 |
result | ITokenInfo | 是 | 重新整理後的token。 |