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 的话,他们都可以透过信箱寄送一个 神奇的连接 让你登入。


最後一些细节,将会在【实战篇】在详细展开讨论。

参考资料


<<:  [Java Day25] 6.2. 改写

>>:  Day22 跟着官方文件学习Laravel-Hash

【Day 08】 实作 - 透过 AWS 服务 - AppFlow 把 Google Analytics 资料存放至 AWS 中 ( 1 )

今天我们来实作怎麽『 透过 AWS 服务把 Google Analytics 资料撷取存放至 AWS...

Day 18:数据蒐集、资料视觉化、数据分析

前言 在公司内部总是有大大小小的提案,每个提案都有拥护的人,但是大家各说各话,没有办法公平的做出决定...

RISC-V: 介绍

系列文章主要是为了练习规律产出,实验性质比较重一点, 内容会根据目前的反馈做出一点改变,欢迎感兴趣的...

2021 未来商务展 5月13 ~ 5月15日 台北圆山花博争艳馆

2021 未来商务展 5月13 ~ 5月15日 台北圆山花博争艳馆 https://www.futu...

17. 解释 Same-Origin Policy

Same-Origin Policy 同源政策 浏览器基於安全性的考量,在应用fetch API或是...