Channel Access Token 是驗證訪問 LINE Messaging API 系列 API 的先決條件,例如 Broadcast Messaging、建立 Richmenu 或檢索 Insight 等。Channel Access Token 是 API 的門牌鑰匙。
最近,LINE 推出了 Stateless Channel Access Token 或可以另稱 Channel Access Token V3,提高了 Messaging API 的安全性,更好地防止重送攻擊(Replay attack)。當開發者不小心把 Token 弄丟,因為它的壽命只有15分鐘。它易於管理,並可以無限量地使用 Token 。
在本文中,我將介紹每個類別的Channel Access Token ,特別是 Stateless Channel Access Token ,包括 Issue、Revoke 和Verify,以及分析從作者的角度來看,每個 Token 的優缺點,如果準備好了,開始!
1. Long-lived Channel Access Token
由於這種類型的 Channel Access Token 的名稱是 Long-live,它具有一個特殊的功能,可以讓它被用很久(100 年,請查看第 1.3 節),我相信大多數 LINE 聊天機器人開發人員可能正在使用這種類型的 Token ,因為這種類型的 Token 將在 Messaging API Channel 建立的階段產生,適合所有初學者。
- 優點:Issue容易維護
- 缺點:安全性較低,因為駭客可能會將其應用於各種 API,如 long text broadcast。
1.1 Issue
只需按Messaging API Channel中的「Issue」 按鈕,即可輕鬆存取此類型的Channel Token 。

按下“Issue”按鈕後,您將獲得一個 Token ,該 Token 可以運行 API。

1.2 Revoke
如果開發人員不確定 Token 是否洩露,則需要透過 Revoke 將 Token 刪除。開發人員可以透過兩種方式重建這種類型的 Token 。
方法 1 在Messaging API Channel
頁面上按「返回」,它會在取消舊 Token 的同時啟動新 Token ,開發人員可以定義舊 Token 的存留時間從 0 到 24 小時,其中 0 表示 Revoke 立即(將在 5 分鐘內過期)。

方法 2 透過 API
重新調用此方法是一種即時 Token 調用方法。開發人員必須建立請求才能透過以下 API 進行重新生成。
Endpoint https://api.line.me/v2/oauth/revoke
Method POST
Headers
Content-type: application/x-www-form-urlencoded
Body
access_token: Channel Access Token
1.3 Verify
如果開發人員希望Verify或確認Channel Access Token 的狀態是無效的還是無效的,可以透過API建立請求來Verify,如下所示。
Endpoint https://api.line.me/v2/oauth/verify
Method POST
Headers
Content-type: application/x-www-form-urlencoded
Body
access_token: Channel Access Token
如果請求成功,我們將收到 HTTP 狀態代碼 200 以及 JSON 物件,該物件表示 Token 的剩餘時間,例如:
{
"client_id": "1350031035",
"expires_in": 3138007490,
"scope": "P CM"
}
2. Short-lived Channel Access Token
其特點是壽命更短(只有 30 天),1 個Channel最多可以釋放 30 個 Token 。如果 Issue 超過 30 個,則將相應地重新啟動最舊的 Token 。
- 優點:中等安全,每個 Token 的有效期為 30 天。
- 缺點:駭客洩露案例最多可應用於30天(如 Message broadcast)等API,這類型的 Token 管理相對麻煩,因為它需要條件來監視 Token 的狀態和儲存。
2.1 Issue
這種類型的Channel Access Token 必須透過 API 完成,開發人員必須建立以下請求。
Endpoint https://api.line.me/v2/oauth/accessToken
Method POST
Headers
Content-type: application/x-www-form-urlencoded
Body
grant_type: client_credentials
client_id: Channel ID
client_secret: Channel Secret
如果請求成功,我們將在包含Channel Access Token 的 JSON 物件和 Token 的剩餘時間中返回 HTTP 狀態代碼 200,例如:
{
"access_token": "W1TeHCgfH2Liwa.....",
"expires_in": 2592000,
"token_type": "Bearer"
}
2.2 Revoke
如果開發人員不確定或不確定 Token 已洩露,則 Token 將刪除。開發人員可以透過請求 API 重新調用這種類型的 Token ,詳情如下:
Endpoint https://api.line.me/v2/oauth/revoke
Method POST
Headers
Content-type: application/x-www-form-urlencoded
Body
access_token: Channel Access Token
2.3 Verify
如果開發人員希望Verify或確認Channel Access Token 的狀態是否無效,可以透過API建立請求來Verify,如下所示。
Endpoint https://api.line.me/v2/oauth/verify
Method POST
Headers
Content-type: application/x-www-form-urlencoded
Body
access_token: Channel Access Token
如果請求成功,我們將收到 HTTP 狀態代碼 200 以及 JSON 物件,該物件指示 Token 的剩餘時間,例如:
{
"client_id": "1350031035",
"expires_in": 3138007490,
"scope": "P CM"
}
3. Channel Access Token v2.1
Channel Access Token ,允許開發人員自定義 Token 的期限為30天,其中1個Channel最多可以釋放30個 Token 。
- 優點:最大安全性,可根據需要縮短期限,並在 30 分鐘的時間內使用 JWT,而不是每個 Token 的Channel Secret。
- 缺點:Issue和管理程序相當複雜。
3.1 Issue
這種類型的Channel Access Token 必須透過 API 完成,開發人員必須建立以下請求。
Endpoint https://api.line.me/oauth2/v2.1/token
Method POST
Headers
Content-type: application/x-www-form-urlencoded
Body
grant_type: client_credentials
client_assertion_type: urn:ietf:params:oauth:client-assertion-type:jwt-bearer
client_assertion: JWT signed with Assertion Signing Key
如果請求成功,我們將在包含Channel Access Token 的 JSON 物件和 Token 的剩餘時間中返回 HTTP 狀態代碼 200,例如:
{
"access_token": "eyJhbGciOiJIUz.....",
"token_type": "Bearer",
"expires_in": 2592000,
"key_id": "sDTOzw5wIfxxxxPEzcmeQA"
}
3.2 Revoke
如果開發人員不確定 Token 是否洩露,則 Token 將刪除。開發人員可以透過請求 API 重新調用這種類型的 Token ,詳情如下:
Endpoint https://api.line.me/oauth2/v2.1/revoke
Method POST
Headers
Content-type: application/x-www-form-urlencoded
Body
access_token: Channel Access Token
client_id: Channel ID
client_secret: Channel Secret
3.3 Verify
如果開發人員希望Verify或確認Channel Access Token 的狀態是無效的還是無效的,可以透過API建立請求來 Verify,如下所示。
Endpoint https://api.line.me/oauth2/v2.1/verify
Method GET
Query param
access_token: Channel Access Token
如果請求成功,我們將收到 HTTP 狀態代碼 200 以及 JSON 物件,該物件指示 Token 的剩餘時間,例如:
{
"client_id": "1573163733",
"expires_in": 2591659,
"scope": "profile chat_message.write"
}
3.4 檢索所有Verify的Channel Access Token
Channel Access Token v2.1 提供了另一個額外的 API,即我們可以檢索所有Verify Token ,建立以下請求。
Endpoint https://api.line.me/oauth2/v2.1/tokens/kid
Method POST
Headers
Content-type: application/x-www-form-urlencoded
Query Params
client_assertion_type: urn:ietf:params:oauth:client-assertion-type:jwt-bearer
client_assertion: JWT signed with Assertion Signing Key
如果請求成功,我們將使用包含Verify Token 的 JSON 物件返回 HTTP 狀態碼 200,例如:
{
"kids": [
"U_gdnFYKTWRxxxxDVZexGg",
"sDTOzw5wIfWxxxxzcmeQA",
"G82YP96jhHwyKSxxxx7IFA"
]
}
4. Stateless Channel Access Token
Channel Access Token 是最近一種短壽命(僅 15 分鐘),其中 1 個Channel可以無限次地使用 Token 。
- 優點:高度安全,每個 Token 只有 15 分鐘的使用壽命,可減少在 Token 丟失時重送攻擊的問題,並且無需儲存過程,因為我們可以無限次地離開。
- 缺點:經常需要一個Issue,所以可能有延遲。
4.1 Issue
這種類型的Channel Access Token 必須透過 API 完成,開發人員必須建立以下請求。
Endpoint https://api.line.me/oauth2/v3/token
Method POST
Headers
Content-type: application/x-www-form-urlencoded
// The request body to be sent can be selected in 2 ways.
// 1. From Channel ID and Channel Secret (Basic)
Body
grant_type: client_credentials
client_id: Channel ID
client_secret: Channel Secret
// 2. จาก JWT Assertion (แบบขั้นสูง)
Body
grant_type: client_credentials
client_assertion_type: URL-encoded ของ urn:ietf:params:oauth:client-assertion-type:jwt-bearer
client_assertion: JWT ที่ generate จากฝั่ง client และ sign ด้วย private key
如果請求成功,無論使用哪種請求主體提交方式,我們都會收到 HTTP 狀態代碼 200 以及包含Channel Access Token 的 JSON 物件以及 Token 的剩餘持續時間,例如:
{
"access_token": "W1TeHCgfH2Liwa.....",
"expires_in": 900,
"token_type": "Bearer"
}
4.2 重新驗證和Verify
由於Stateless Channel Access Token是一種生命週期較短的Token,只有15分鐘,因此可以無限發行。 並且不需要儲存。因此,它是相當安全的,不需要額外註銷。
摘要
透過以上內容大家已經了解了四種類型的 Channel Access Token。 我想總結一下每種類型中可以擁有的有效 Token 的時限和數量的差異。 列在表格中以便於理解如下:

本文的主要內容是將Channel Access Token 與消息 API 一起使用,但實際上,Stateless Channel Access Token 和 Short-lived Channel Access Token 也可以應用於 LIFF 的 Server API 和 LINE MINI 應用程式的服務資訊。
希望本文將幫助開發人員選擇正確的 Channel Access Token ,以滿足每個人在安全和管理方面的使用案例的需求。下次再見。