Line Messaging API 串接笔记- access token

前言

目标:掌握 Line Messaging API,客製自动回覆功能,这次串接是参考 Line Messaging API 串接手册
前一篇 已经建立好 Channel,这一篇要来取得打 api 时需要的 access token

串接 Line Messaging API 需要 access token,Line 有提供几种不同的 access token,这次参考这篇 Channel access tokens


Access tokens

手册里面有解释了甚么是 access token,大概解释一下,access token 就类似你在登入时要输入帐号密码一样,是一个辨认身分的凭证,只是如果像是使用 API 的时候,每次都要输入帐号密码就会有点麻烦,所以透 access token 来作为凭证。

Line Messaging API 则是透过 channel access tokens 来作为使用 Channel (一个 Channel 就是一个官方帐号)的凭证。

Channel access tokens 种类

Line 总共有三种不同有效时间的 Channel access tokens :

Channel access token with a user-specified expiration (Channel access token v2.1)
可以指定有效时间(最多 30 天),使用 JSON Web Token (JWT)

Short-lived channel access token
有效时间 30 天

Long-lived channel access token
没有有效时间,可以随时重新产生(只适用于Messaging API channels)


产生 channel access tokens v2.1

如果要产生 channel access tokens v2.1 总共需要三个步骤

Create an Assertion Signing Key

Assertion Signing Key specification
手册有三种範例,我参考的是 Generate using browser ,参考手册给的範例就可用浏览器产生,检视 console 就会有一组 private key 、public key(记得要保留,后面会用到)

Register public key and get kid
到 channel >basic setting >Assertion Signing Key 旁边有一个 register a public key 按钮,按下去后要输入刚刚在上一步产生的 public key,输入后就会获得一个 kid

Generate a JWT
JWT 的产生可以参考手册使用 JWT library

JWT decode header,照範例写后贴到 header

{  "alg": "RS256", // 固定  "typ": "JWT", // 固定  "kid": "你在 Assertion Signing Key 那一步产生的 kid" // 上一步产生的 kid}

JWT Payload,照範例也后贴到 payload (以下是 Line 的範例)

{  "iss": "1234567890", // 你的 channel id  "sub": "1234567890", // 你的 channel id  "aud": "https://api.line.me/", // 固定  "exp": 1559702522, // JWT 的有效时间 (时间戳) 最多 30 min   "token_exp": 86400 // channel access token 的有效时间(秒) 最多 30 天}

ps. exp、token_exp 都不能超过最大值,超过的话后面要产出 channel access token 就会失效

产出 channel access tokens v2.1
打 API POST https://api.line.me/oauth2/v2.1/token
以 PHP 为範例

$payload = [    'grant_type' => 'client_credentials', // 固定    'client_assertion_type' => 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer', // 固定    'client_assertion' => '上一步产生的 JWT'];$ch = curl_init();curl_setopt($ch, CURLOPT_URL, 'https://api.line.me/oauth2/v2.1/token');curl_setopt($ch, CURLOPT_POST, true);curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($payload));curl_setopt($ch, CURLOPT_HTTPHEADER, [    'Content-Type: application/x-www-form-urlencoded',]);$Result = curl_exec($ch);curl_close($ch);echo $Result;?>

成功后就会收到 response(以下是 Line 的範例)

{    "access_token": "eyJhbGciOiJIUz.....", // 你的 Channel access token    "token_type": "Bearer",     "expires_in": 2592000, // Channel access token 的有效时间    "key_id": "sDTOzw5wIfxxxxPEzcmeQA" // 你的 key id}

手册有写可以把 Channel access token 跟 key id 存在一起


产生 Short-lived channel access token

打 API https://api.line.me/v2/oauth/accessToken 来产生有效时间 30 天的 access token
以 PHP 为範例

$payload = [    'grant_type' => 'client_credentials',    'client_id' => '你的 channel id',    'client_secret' => '你的 channel secret'];$ch = curl_init();curl_setopt($ch, CURLOPT_URL, 'https://api.line.me/v2/oauth/accessToken');curl_setopt($ch, CURLOPT_POST, true);curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($payload));curl_setopt($ch, CURLOPT_HTTPHEADER, [    'Content-Type: application/x-www-form-urlencoded',]);$Result = curl_exec($ch);curl_close($ch);echo $Result;

成功后就会收到 response(以下是 Line 的範例)

{"access_token":"W1TeHCgfH2Liwa.....","expires_in":2592000, // 有效时间 30 天"token_type":"Bearer"}

Long-lived channel access token

这个方法非常简单,只需要到 channel > Messaging API > 滑到最下面会看到 Channel access token (long-lived),按下 Issue 的按钮就会有了


小小心得

因为 Line 好像还有其他种 API ,每种 API 适用的凭证可能不同,手册最推荐使用的是第一种 channel access tokens v2.1,毕竟是三种方式里面安全性最高的(但也是最麻烦的),可以视自己的需求选择适合的凭证方式,如果是测试玩玩看的话其实用第三种 Long-lived channel access token 就可以了。


参考资料

Channel access tokensIssue channel access tokens v2.1Issue short-lived channel access token

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章