iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 11
1
Modern Web

認識LIFF容易嗎?系列 第 11

[Day11] LIFF LINE Login 與 Authorization

  • 分享至 

  • xImage
  •  

前言

昨天我們看過下方的循序圖,認識liff.login()與liff.isLoggedIn()的用途。
會不會有人也和我一樣,發現在實際用Chrome瀏覽器開啟LIFF APP的時候,觀察到URL有所變化。
liff.login()前後做了哪些事?

image

Line Login

實際點擊聊天室內的LIFF URL
image
我們到了Line Login的畫面,如同一開始的流程圖所示。liff.login()之後,跳轉到Line Login Server。

什麼是Line Login
LINE Login 功能整合至 web app ,讓用戶可使用 LINE 帳號登入 app。
LINE Login 的認證及授權流程是以 OAuth 2.0OpenID® Connect 協定為基礎

image

這時候可以仔細觀察到網址的組成:
image
如此長一串的URL,其實在做得事情是: 為 APP 要求權限,進行用戶驗證。可以發現其中帶有query parameter,是不是覺得有幾個單字很眼熟!?

此時URL 中的 query parameter:

  • consent: 用於強迫顯示同意畫面,無論使用者是否已提供所有被要求的存取權限。
  • bot_prompt: 如何顯示將 LINE 官方帳號加為好友的選項,可指定為 normal 或 aggressive。
  • scope: 使用者提供的權限屬性。
  • response_type: LINE Platform 回傳授權碼。
  • redirect_url: 使用者於認證及授權後,將被重新導向至此 URL 頁面。此處即建立LIFF APP所設定的Endpoint URL。
  • state: 專屬的 alphanumeric string,用於防止跨站請求偽造 (cross-site request forgery)。此值應由開發者的應用隨機產生。
  • app_id: 你的LIFF ID
  • client_id: 你的Channel ID
  • loginChannelId: 你的Channel ID
  • code_challenge: 設定此參數來協助避免授權代碼攔截攻擊。
  • code_challenge method: 產生 code challenge 的方法

認證及授權後,導頁至Endpoint URL,其中的 query parameter:
image

  • code: 用以取得 access token 的授權碼。效期為 10 分鐘。此授權碼僅能使用一次。
  • liffClientId: 你的Channel ID
  • state: 包含於 original request authorization URL 中。開發者應確認此值與 original request 的值相符。仔細看會發現這裡的值,和登入頁面URL中的state是一致的。
  • liffRedirectUrl: 即建立LIFF APP所設定的Endpoint URL。

到這裡,我們就可以用code換取access token,同時取得id token,後續再透過id token 取得使用者資料與 Email Address。

Authorization Page

如果用手機,第一次點擊LIFF URL,會出現認證頁面
image
image

從這裡可以更認識到,起初在建立Login Channel的名稱及描述內容,皆顯示於畫面上。
另外也可以注意到,用戶可以按取消,拒絕為開發者提供權限。這時候就可能在liff.init()的errorCallback,抓到 Error Response。

參考


上一篇
[Day10] LIFF Login 與 IsLoggedIn
下一篇
[Day 12] LIFF Logout
系列文
認識LIFF容易嗎?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
arguskao
iT邦新手 4 級 ‧ 2023-01-01 14:27:49

我想請問一下,這裡的login,萬一離開以後,回來還要登入一次嗎??

我要留言

立即登入留言