iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 15
1
Modern Web

認識LIFF容易嗎?系列 第 15

[Day 15] LIFF GetDecodedIDToken

  • 分享至 

  • xImage
  •  

前言

我們認識到id_token本身是JWT,其中包含用戶資訊。
但拿到一長串的id_token後,要怎麼知道它包含哪些資訊?

關於 ID Token

讓我們再深入了解id_token,它是依據JWT結構,由三個部分所組成,分別是headerpayloadsignature。三者之間,由.隔開,每個部分皆由Base64 URL編碼。例如:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

解碼JWT的結果:

  • header
{
  "typ": "JWT",
  "alg": "HS256"
}
  • payload
{
    "iss": "https://access.line.me",
    "sub": "U1234567890abcdef1234567890abcdef ",
    "aud": "1234567890",
    "exp": 1504169092,
    "iat": 1504263657,
    "nonce": "0987654asdf",
    "amr": ["pwd"],
    "name": "Taro Line",
    "picture": "https://sample_line.me/aBcdefg123456"
}
  • signature
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  
your-256-bit-secret

)

詳細的介紹,請參考這篇JWT Introduction

liff.getDecodedIDToken

取得id_token的payload,其中包含用戶的暱稱、大頭貼URL和電子郵件地址。

image

payload

{
    "iss": "https://access.line.me", // id_token 出處
    "sub": "U1234567890abcdef1234567890abcdef ", // User ID
    "aud": "1234567890", // Channel ID
    "exp": 1504169092, // token 到期時間
    "iat": 1504263657, // id_token 產生時間
    "amr": [  // 用戶驗證的方法(可以理解成用戶登入LIFF APP的方法)
        "pwd" // 另外可能出現的值: lineautologin、lineqr或linesso
    ],
    "name": "Taro Line", // 用戶暱稱
    "picture": "https://sample_line.me/aBcdefg123456" //用戶大頭貼URL
}

注意

  • liff.getDecodedIDToken()的使用,其實和Line Developers Console裡,LIFF APP的scope設定相關。
    假如openid未勾選,執行liff.getDecodedIDToken的結果會是null
  • 執行liff.getDecodedIDToken()後,回傳的payload中,name、picture屬性,也和LIFF APP的scope設定相關。假如profile未勾選,執行liff.getDecodedIDToken後,name、picture屬性不會包含在payload中。
    image

實作

liff.init({
 liffId: '後台取得的LIFF ID'
}) .then(() => {
  if (liff.isLoggedIn()) {
   const idToken = liff.getDecodedIDToken();
   console.log(idToken) // print decoded idToken object
  }
}
}).catch((err) => {
 console.log('初始化失敗')
});

image

參考


上一篇
[Day14] LIFF GetIDToken
下一篇
[Day16] LIFF GetContext
系列文
認識LIFF容易嗎?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言