使用C#開發Linebot(25) - 動態 re-issue short-lived channel access token

這是最近關於Line bot開發人員的一個很重要的議題。

在過去,我們進行Line bot開發的時候,使用到的Channel Access Token大部分都是透過Line的後台所產生的long-lived token。

(大部分? 不是全部嗎? 難道還有其他方法???)

其實是有的,Long-lived token是一個方便的做法,但它是不會過期的,除非你重新issue一個新的Long-lived token。

這雖然方便,但相對不安全。只要知道Token的任何人,都可以透過這個token成為你的bot的控制者,來發送push message訊息。

所以?

因此,LINE預計要在2018/11月終止Long-lived token,相關的公告請參考底下連結:
https://developers.line.me/en/news/2018/08/13/

這意味著,以後你可能(細節我還不確定,但LINE應該會有後續的相關公告與說明)就無法使用Long-lived token了。

好,那重點來了,如果不能使用Long-lived token,替代的方式是什麼呢?
是short-lived token,相關資訊可以參考底下連結:

https://developers.line.me/en/reference/messaging-api/#issue-channel-access-token

從官方的說明中可以看到 short-lived token是有使用期限的,它只有30天的壽命,且,你最多只能同時擁有30個short-lived token。如果你issue超過30個short-lived token,則前面issue的token將會失效。

如何Issue一個short-lived token呢? 具體做法是透過 http post:

你可以針對https://api.line.me/v2/oauth/accessToken送出一個post,並且帶上grant_type, client_id, client_secret這幾個參數。而client_id, client_secret就是你在LINE Messanging API後台中的Channel Id和Channel Secret:

如果你用LineBotSDK則更簡單,只需要透過底下這樣的C#程式碼:

其中的參數,就是上面的Channel id與channel secret,呼叫後取得的token.access_token就是short-lived token囉。

你可以透過取得的token去發送push message,會發現他確實就是一個可以使用的channel access token,但別忘記他有30天的限制,30天後就失效了。

這種方式和過去永不失效的token有些許的差異,如果你想維持程式碼不改變,那最簡單(也最麻煩)的方式是每隔28天(總是要有一點buffer)自己手動申請並置換程式碼裡面的token(一般來說就是改設定檔而已,還好)

但如果你嫌麻煩,想透過自動化的機制完成這件事情,那你可以在程式碼中做一些小小的調整。讓token失效時(當發生Unauthorized Exception時),透過上面的程式碼自動申請一個新的token,取代原本的token,但如此一來,你必須把channel id, channel secret放到程式碼(或設定檔)中,在安全性上可能比較需要注意。

再次強調,為什麼這很重要?

這篇寫到這邊,或許你還是有點疑惑,幹嘛管那麼多呢,我全部都用LINE後台產生的long-lived token就好啦…但,別忘了唷,剛才說過,今年(2018)11月,Long-lived token將會跟大家說bye-bye囉,未來,將會只有short-lived token喔,所以,趁早做好準備吧。

差點忘了,你可以在底下找到完整的範例程式碼:
https://github.com/isdaviddong/Line-reissue-short-live-token

另外,必須把LineBotSDK升級到 0.7.6:
https://www.nuget.org/packages/LineBotSDK/0.7.6

-----------
線上課程:https://www.udemy.com/line-bot/
電子書:http://studyhost.blogspot.tw/2017/12/line-bot.html
LineBotSDK:https://www.nuget.org/packages/LineBotSDK
如果需要即時取得更多相關訊息,可按這裡加入FB專頁。若這篇文章對您有所幫助,請幫我們分享出去,謝謝您的支持。

留言

LeoChien表示…
https://developers.line.me/en/news/#update-discontinuation-of-the-long-lived-channel-access-token-2018-09-27

目前 Line 決定暫緩關閉 Long-lived token,還是要持續關注了。
isDavid寫道…
是的唷,它們說會找一個比較不影響開發人員的方法,期待中...

這個網誌中的熱門文章

在POC或迷你專案中使用 LiteDB

使用 Airtable 在小型需求上取代傳統資料庫

使用Qdrant向量資料庫實作語意相似度比對

專業的價值...

精彩(且驚人)的Semantic Kernel入門範例