Spotnana 驗證流程總覽

建立者 Ashish Chaudhary, 修改時間 星期六, 4 十月 於 10:10 PM 由 Ashish Chaudhary

Spotnana 驗證流程總覽

目錄

Spotnana 提供多種驗證方式,協助合作夥伴安全地串接我們的平台。這份說明文件會帶你快速了解 Spotnana 目前支援的各種驗證方式,並詳細說明每一種流程。這些驗證流程主要是用來說明 Spotnana 如何驗證並授權使用者,讓他們能夠存取公司在 Spotnana 平台上的專屬資源。


主要元件說明

在開始之前,建議先看過這份元件說明,了解本文件中會提到的主要系統元件。

  • Spotnana UI(Spotnana 使用者介面) 指的是 Spotnana 的前端網頁應用程式(也就是線上訂位工具)或 Spotnana 行動應用程式。這裡主要是指登入頁面,當使用者登入或註冊時,會啟動前端的驗證流程。
  • Spotnana server 指的是 Spotnana 負責驗證的後端伺服器(例如授權使用者存取資源,以及安全儲存、處理使用者資料)。
  • 合作夥伴 UI (合作夥伴的使用者介面) 合作夥伴用來存取 Spotnana 平台的前端介面。例如,在 iFrame 驗證情境下,Spotnana 會嵌入在合作夥伴的 UI 裡,使用者會透過合作夥伴的 UI 進入 Spotnana。
  • 合作夥伴 server 指的是合作夥伴用來串接 Spotnana 的一個或多個後端伺服器。
  • Spotnana IdP (Spotnana 身分驗證服務) 指的是 Spotnana 內部用來管理使用者身分與授權的服務。
  • 合作夥伴 IdP 合作夥伴所使用的第三方身分驗證服務(IdP),常見的有 Google、Azure 等。 
  • OBT Spotnana 線上訂位工具(OBT),可透過下列網址使用 https://app.spotnana.com/ 
  • Subject token 在 iFrame(或稱 token 交換)驗證中,subject token 代表使用者的身分。這個 token 會用來查詢使用者資訊並授權他們進入 Spotnana 平台。
  • Access token 這是一組憑證(OAuth),讓合作夥伴的應用程式可以代表使用者存取受保護的資源。它是一組暫時性的授權金鑰,讓應用程式可以安全發送 API 請求,而不用暴露使用者的帳號密碼。
  • Refresh token 這是一組長效憑證,可以用來更新 access token,不需要使用者再次登入。通常在首次登入時,會和 access token 一起發放。
  • Client credentials 提供給直接連接 Spotnana API 的使用者(例如:一組唯一的 clientIdclientSecret)。
  • PID(個人識別碼) 為每位使用者建立的專屬識別碼。PID 會用來從 Spotnana server 取得使用者資訊。
  • orgId Spotnana 指派給每個公司(組織)的唯一識別碼。
  • tmcId Spotnana 指派給每個 TMC(旅行管理公司)的唯一識別碼。


支援的驗證方式

Spotnana 目前支援以下幾種驗證方式:


密碼驗證

如果你選擇用密碼驗證,Spotnana UI(也就是 OBT 的登入或註冊頁面)會負責啟動並處理整個驗證流程,與 Spotnana 的後端伺服器互動。這種方式會依照使用者是登入現有帳號,還是註冊新帳號,流程上有些不同。以下會用流程圖來說明這兩種情境的驗證步驟。


現有使用者

下方的流程圖及步驟,會說明 Spotnana UI 如何與後端服務互動,完成現有使用者的驗證。

圖示: 說明現有使用者密碼驗證流程的時序圖。


步驟流程說明
現有使用者在 OBT 或 Spotnana 行動版輸入 email 進行登入。
1
  • Spotnana UI 會發送 API 請求到 Spotnana server,取得該使用者的驗證設定資訊。這個請求會包含使用者的登入憑證。
  • 回應內容會帶回使用者的 tmcIdorgIdauthProviderType
2
  • Spotnana UI 會用 clientId、email 和密碼發送 API 請求到 Spotnana IdP。Spotnana IdP 會產生新的 bearer token 並回傳給 Spotnana UI。
  • 這個步驟就完成了使用者的驗證。
3
  • 使用者驗證通過後,之後所有的 API 請求都必須在 request header 帶上 bearer token、 orgIdtmcId
  • 所有 API 請求收到的 bearer token 都會被驗證,驗證通過後才會回應給 Spotnana UI。


新使用者

下方的流程圖及步驟,會說明 Spotnana UI 如何與後端服務互動,完成新使用者(或要重設密碼的現有使用者)的驗證。


圖示: 說明新使用者密碼驗證流程的時序圖。


步驟
流程說明
新使用者在 Spotnana OBT 登入頁輸入 email,然後點選 下一步
1
  • Spotnana UI 會發送 API 請求到 Spotnana server,取得該使用者的驗證設定資訊。這個請求會包含使用者的登入憑證。
  • 回應內容會帶回使用者的 tmcIdorgIdauthProviderType
1 a

使用者輸入新密碼後,點選 下一步

2
  • Spotnana UI 會發送 API 請求到 Spotnana IdP,註冊使用者,並帶上 clientId、email 和新密碼。
  • 註冊完成後,系統會寄送一次性驗證碼(OTP)到使用者信箱。
3
  • 使用者在 Spotnana UI 輸入 OTP,然後點選 驗證
  • Spotnana UI 會發送請求到 Spotnana IdP,驗證 OTP 並產生登入用的 bearer token。
  • bearer token 產生後會回傳給 Spotnana UI,代表使用者已經成功驗證,可以用 bearer token 存取 Spotnana 平台。
4
  • 使用者驗證通過後,之後所有的 API 請求都必須在 request header 帶上 bearer token、 orgIdtmcId
  • 所有 API 請求收到的 bearer token 都會被驗證,驗證通過後才會回應給 Spotnana UI。


IdP 驗證

Spotnana 支援透過像是 Google、Azure 及客製化 IdP(支援 OpenID Connect 或 SAML)的驗證。下方會用流程圖及步驟說明 IdP 驗證的流程。

圖示: 說明 IdP 驗證流程的時序圖。


步驟流程說明
使用者在 OBT 或 Spotnana 行動版輸入 email 進行登入。
1
  • Spotnana UI 會發送 API 請求到 Spotnana server,取得該使用者的驗證設定資訊。這個請求會包含使用者的登入憑證。
  • 回應內容會帶回使用者的 tmcIdorgIdauthProviderType
2

Spotnana UI 會將請求導向 Spotnana IdP。

3

Spotnana IdP 會再將請求導向合作夥伴的 IdP,正式啟動 IdP 驗證流程。

注意: 每次重新導向時,系統會回傳 302 狀態碼,表示請求已被導向到其他網址。
4

Spotnana IdP 和合作夥伴 IdP 之間會建立連線,確保使用者由合作夥伴 IdP 驗證通過。

注意: 在這個連線過程中,Spotnana IdP 會用 API call 方式,把 clientIdclientSecret 以 form URL-encoded 格式傳給合作夥伴 IdP。如果對方 IdP 伺服器不支援這個格式,Spotnana server 可以當作 proxy,將資料轉換成合作夥伴 IdP 能接受的格式。
5

合作夥伴 IdP 驗證使用者成功。

注意: 這一步完成後,使用者資料還需要經過 bearer token 驗證。
5 a

合作夥伴 IdP 驗證成功後,會把回應傳給 Spotnana IdP。

5 b

Spotnana IdP 會針對該使用者產生一組唯一的 code,並傳給 Spotnana UI。

6
  • Spotnana UI 會用 clientID 和步驟 5(b) 拿到的 code 發送 API 請求給 Spotnana IdP。
  • Spotnana IdP 會產生新的 bearer token 並回傳給 Spotnana UI。
注意: 成功產生 bearer token 就代表使用者已經驗證通過,可以存取 Spotnana。
7
  • 使用者驗證通過後,之後所有的 API 請求都必須在 request header 帶上 bearer token、 orgIdtmcId
  • 所有 API 請求收到的 bearer token 都會被驗證,驗證通過後才會回應給 Spotnana UI。


API 驗證

如果合作夥伴是透過 Spotnana API 串接平台,可以用我們的驗證端點,為使用者產生 bearer token。下方的時序圖會說明 API 驗證的流程。

圖示: 說明 API 驗證流程的時序圖。


步驟流程說明
1

API 使用者發送 POST 請求到 get-auth-token(clientId,clientSecret) 這個 Spotnana server 的 API 端點,來產生並取得暫時性的 bearer token。

下面提供一個 cURL 範例,說明如何呼叫 get-auth-token 端點:

curl -i -X POST \
https://api.spotnana.com/get-auth-token \
-H 'Content-Type: application/json' \
-d '{
  "clientId": "sample-apiuser@tmcorg.com",
  "clientSecret": "<password>"
}'
注意: 請將 clientId 和 clientSecret 換成你從 Spotnana 拿到的憑證。 
2
  • Spotnana server 會呼叫 getToken(clientId,clientSecret) 這個 Spotnana IdP 的方法,產生暫時性的 bearerToken ,並回傳給 Spotnana server。
  • Spotnana server 會把這個 bearer token 用 JSON 格式回傳給 API 使用者。


API 使用者拿到 bearer token 後,之後所有發送到 Spotnana API(例如 行程相關 API)的請求,都必須在 header 夾帶 bearer token 才能授權。 

注意: 這個 get-auth-token(clientId, clientSecret) 端點每 5 分鐘最多只能呼叫 100 次。


iFrame 驗證

iFrame 或嵌入式方案是指合作夥伴把 Spotnana UI 直接嵌入在自己的 UI 裡,這樣使用者就會從合作夥伴的 UI 進入 Spotnana。這種情境下,使用者的驗證主要是透過合作夥伴與 Spotnana 之間的 token 交換來完成。

注意:在 iFrame 驗證流程中,登入的使用者會被稱為 caller。這是因為有些情境下,API/機器用戶會以管理員身分登入,並為其他使用者請求 access token。所以我們用 caller 這個詞,泛指登入自己帳號的使用者,或是 API/機器用戶幫其他人請求 access token 的情況。


下方的時序圖會說明 Spotnana 與合作夥伴 server 之間,透過 token 交換來處理驗證流程。

圖示: 說明 iFrame 驗證流程(token 交換)的時序圖。


步驟流程說明
caller 透過合作夥伴 UI 進行登入。
1合作夥伴 UI 會用 iFrame 方式顯示 Spotnana UI。
2Spotnana UI 會透過 post message 向合作夥伴 UI 請求 token,請求內容會帶上 type=TOKEN_EXCHANGE_REQUEST
3

合作夥伴 UI 會發送 API 請求給合作夥伴 server,取得 OAuth token,啟動後續驗證流程。

3 a

合作夥伴 server 會帶著使用者憑證和 subject token,呼叫 Spotnana server。Spotnana server 會檢查這個請求是不是來自 API/機器用戶。

3 b
  • Spotnana server 會呼叫合作夥伴 server,取得 subject(也就是 caller)的 email。
  • 合作夥伴 server 會回傳 email,Spotnana server 會用這個 email 來識別使用者。
3 c
  • Spotnana server 會把 access token 和 refresh token 回傳給合作夥伴 server。
  • 這些資訊會再傳回合作夥伴 UI。
4

合作夥伴 UI 會用 post message,把 token 傳給 Spotnana UI,內容帶上 type=TOKEN_EXCHANGE_RESPONSE.

5
  • Spotnana UI 會發送 API 請求到 Spotnana server,產生並取得新的 bearer token。
  • Spotnana server 會產生 bearer token 並回傳給 Spotnana UI。
注意: 成功產生 bearer token 就代表使用者已經驗證通過,可以存取 Spotnana。
6
  • 使用者驗證通過後,之後所有的 API 請求都必須在 request header 帶上 bearer token、 orgIdtmcId
  • 所有 API 請求收到的 bearer token 都會被驗證,驗證通過後才會回應給 Spotnana UI。


授權碼驗證

下方的時序圖會說明,如何用授權碼來處理驗證流程。

圖示: 說明授權碼驗證流程的時序圖。


步驟流程說明
1

合作夥伴 UI 會呼叫合作夥伴 server,取得 caller 的授權碼,然後回傳給合作夥伴 UI。

2

合作夥伴 UI 會用帶有 tmcIdauthCode 的自訂 redirect URL,發送請求給 Spotnana UI。

3

Spotnana UI 會發送 POST API 請求到 Spotnana server,使用 v2/auth/token/companies/<tmcId>(authCode) 這個 API 端點。

3 a
  • Spotnana server 會用授權碼跟合作夥伴 server 取得使用者的 pid
  • 使用者的 pid 會回傳給 Spotnana server。
3 b

Spotnana server 會產生 access token 和 refresh token,並回傳給 Spotnana UI。

4
  • Spotnana UI 會用 access token 和 refresh token 發送請求到 Spotnana server,產生 bearer token。
  • Spotnana UI 會收到產生好的 bearer token。
注意: 成功產生 bearer token 就代表使用者已經驗證通過,可以存取 Spotnana。
5
  • 使用者驗證通過後,之後所有的 API 請求都必須在 request header 帶上 bearer token、 orgIdtmcId
  • 所有 API 請求收到的 bearer token 都會被驗證,驗證通過後才會回應給 Spotnana UI。


注意: 這種驗證流程不適合 TMC 管理員讓多位使用者共用同一個 email 登入的情境。


機器對機器(M2M)驗證

M2M 驗證適合用在客戶端應用程式需要存取第三方 callback URL,來為使用者產生 accessToken 的情境。下方時序圖會說明 M2M 驗證流程。

圖示: 說明 M2M 驗證流程的時序圖。


步驟流程說明
所有參與驗證的應用程式公鑰,會在 Spotnana server 和 Spotnana IdP 之間同步。這些公鑰會用來驗證 access token。
1

合作夥伴 server 會發送 API 請求到 /oauth2/token(clientId,clientSecret) 這個 Spotnana IdP 端點,產生 bearer token,然後回傳給合作夥伴 server。

2
  • 合作夥伴 server 會發送 API 請求到第三方 callback URL,為使用者產生 access token。
  • access token 產生後,會傳給 Spotnana server。
3
  • Spotnana server 會用先前同步的公鑰驗證 access token 的簽章,同時也會驗證 claim_id ,確認合作夥伴身分。
  • access token 驗證通過後,會傳給合作夥伴 server,完成使用者驗證。




這篇文章是否有幫助?

太棒了!

感謝您提供意見回饋

抱歉,沒能幫到您

感謝您提供意見回饋

請讓我們知道如何改善這篇文章!

請選擇至少一個原因
必須進行 CAPTCHA 驗證。

意見已發送

感謝您的寶貴意見,我們將嘗試修改這篇文章