iT邦幫忙

2021 iThome 鐵人賽

DAY 21
0
Software Development

用Keycloak學習身份驗證與授權系列 第 21

Day20 - 【概念篇】OAuth flows: Device Code(2)

本系列文之後也會置於個人網站


光要完成這個範例就花了幾乎整整一天
做完後決定...來拆篇


這第二部份,將有部份內容會在【實戰篇】展開。
今天就先來看看成果。

成果發表

在這次的範例應用中,同樣是簡單的「Hello, Bob.」。在應用一開始僅僅是起始畫面:

在點擊「登入」後,應用會先與授權伺服器溝通(後端通訊),先行取得device_codeuser_code。接著應用會將user_code交給使用者,也就是下圖裏的TEDG-VRMU

並且會給與一個登入連接,可以輸入這個代碼:

輸入代碼後就可以登入授權。接著應用就會取得存取權杖,像使用者Say Hello~

使用QR Code登入的應用(使用特殊連接登入的應用)

除此之外,還可以透過手機掃描QR Code登入。

不過需要將授權伺服器也可以與手機溝通。 在學習實驗上,可以將http://localhost:8080改成區域網路的IP -- http://192.168.x.x:8080,比如:http://192.168.1.103:8080

實際上這個QR Code儲存的資訊就只是一個包含user_code的特殊登入連結 -- http://localhost:8080/auth/realms/quick-start/device?user_code=TEDG-VRMU

接著來看一下其他類似登入方式的應用。

Discord

Discord

QR Code同樣是一個特殊連結: https://discord.com/ra/XRwgIWiSKLz22RRDQR4Zg61CKDzFE6CX8KW3jj4rxhc

LINE

LINE

QR Code同樣是一個特殊連結: https://line.me/R/au/q/SQ4b7330474737387673564b76775468366b6f4e436f624236474a31444e487339?secret=GjqDoowV9nLHjXuxXlmWQTNIOrt0usSjd99vs3GdKXc%3D&e2eeVersion=1

Telegram

Telegram

Telegram得到的結果比較特別,但同樣是URI: tg://login?token=AQXTX1lhVEI6pbRlA3HLtBz6wnrH6TGkpjwcBj7t6Cek4A==。這個URI在桌面或手機瀏覽器開啓時,若有適當註冊,同樣會在開始特定應用程式。

其他已特殊連接登入的應用

在「深入OAuth 2.0」提到的「特殊密碼」提到過一些相似的形式:

  • 透過簡訊驗證: 透過簡訊寄送一組限時且只能使用一次的密碼
  • 透過信箱驗證: 透過信箱寄送一組限時且只能使用一次的密碼
  • 特殊連接驗證: 透過一個特殊的連接,該連接有時效性,且只能存取一次。
  • 透過時間產生特殊密碼: TOTP, Time-base One Time Password。
  • 透過雜湊產生特殊密碼: HOTP, HMAC-based One Time Password。
  • 與系統服務約定好數組一次性密碼
  • 與系統服務約定好特殊狀況使用密碼
  • 使用行動裝置登入

雖然不存在QR Code,但Medium、Notion同樣可以透過特殊連接登入。非常像這裏體到的Device Code模式。

如果你有使用過Medium、Notion 、 Tumblr 的話,他們都可以透過信箱寄送一個 神奇的連接 讓你登入。


最後一些細節,將會在【實戰篇】在詳細展開討論。

參考資料


上一篇
Day19 - 【概念篇】OAuth flows: Device Code(1)
下一篇
Day21 - 【概念篇】在Flow這段小旅途外的風景
系列文
用Keycloak學習身份驗證與授權40

尚未有邦友留言

立即登入留言