Spotnana 认证流程简介

创建者 Ashish Chaudhary, 修改于 星期六, 4 十月 在 11:33 AM 由 Ashish Chaudhary

Spotnana 认证流程 - 概览

目录

Spotnana 提供多种认证方式,方便合作伙伴安全集成我们的平台。本文档将整体介绍 Spotnana 当前支持的各类认证方式,并详细说明每种流程。这里提到的不同认证流程,展示了 Spotnana 如何对用户进行身份验证和授权,从而让用户访问其公司在 Spotnana 平台上的专属资源。


核心组件

在开始操作前,建议先了解下文档中涉及到的核心系统组件的定义。

  • Spotnana UI(Spotnana 用户界面) 指 Spotnana 的前端网页应用(即在线预订工具)或 Spotnana 手机 App。更具体来说,主要指登录页面,用户登录或创建新账号时,会触发前端的认证流程。
  • Spotnana 服务器 指 Spotnana 后台服务器,用于身份认证(例如授权用户访问资源、保障用户信息的安全存储和处理等)。
  • 合作伙伴 UI (合作伙伴用户界面) 合作伙伴用于访问 Spotnana 平台的前端界面。例如,在 iFrame 认证场景下,Spotnana 平台会嵌入到合作伙伴的 UI 中,用户通过合作伙伴的界面访问 Spotnana。
  • 合作伙伴服务器 指合作伙伴为对接 Spotnana 而部署的一个或多个后台服务器。
  • Spotnana IdP (Spotnana 身份提供方) 指 Spotnana 内部用于用户身份管理和授权的服务。
  • 合作伙伴 IdP 合作伙伴使用的第三方身份提供方(IdP),常见的有 Google、Azure 等。 
  • OBT Spotnana 的在线预订工具(OBT),可通过以下地址访问 https://app.spotnana.com/ 
  • Subject token(主体令牌) 在 iFrame(或令牌交换)认证中,subject token 代表用户身份。系统会用这个令牌查询用户信息,并授权其访问 Spotnana 平台。
  • Access token(访问令牌) 合作伙伴应用在代表用户访问受保护资源时使用的 OAuth 认证凭证。它是一种临时授权密钥,允许应用安全地调用 API,而无需暴露用户的账号密码。
  • Refresh token(刷新令牌) 一种长期有效的凭证,用于在无需用户再次登录的情况下获取新的 access token。通常在首次登录时,与 access token 一起下发。
  • Client credentials(客户端凭证) 用于直接连接 Spotnana API 的用户所需的信息(即唯一的 clientIdclientSecret)。
  • PID(个人标识符) 为用户生成的唯一标识,用于从 Spotnana 服务器获取用户信息。
  • orgId Spotnana 分配给用户所在组织的唯一标识符。
  • tmcId Spotnana 分配给 TMC(差旅管理公司)的唯一标识符。


支持的认证方式

Spotnana 目前支持以下几种认证方式:


密码认证

在密码认证模式下,Spotnana UI(即 OBT 登录或注册页面)会发起并管理与后台服务器的认证流程。具体流程会根据用户是已有账号登录,还是新用户注册而有所不同。下面会分别用时序图说明这两种认证流程。


已有用户

下方的时序图和步骤,展示了 Spotnana UI 如何与后台服务协作,完成已有用户的身份认证。

图示: 已有用户密码认证流程的时序图说明。


步骤流程
已有用户通过 OBT 或 Spotnana 手机 App,输入邮箱进行登录。
1
  • Spotnana UI 向 Spotnana 服务器发送 API 请求,获取该用户的认证配置信息。请求参数中包含用户的登录凭证。
  • 返回结果会包含用户的 tmcIdorgIdauthProviderType
2
  • Spotnana UI 使用 clientId、邮箱和密码,向 Spotnana IdP 发送 API 请求。Spotnana IdP 会生成新的 bearer token 并返回给 Spotnana UI。
  • 此步骤完成用户认证。
3
  • 用户通过第 2 步认证后,后续所有 API 请求都必须在请求头中带上 bearer token、 orgIdtmcId
  • 所有 API 请求中的 bearer token 都会被校验,校验通过后再返回响应给 Spotnana UI。


新用户

下方的时序图和步骤,展示了 Spotnana UI 如何与后台服务协作,完成新用户(或已有用户重置密码)的身份认证。


图示: 新用户密码认证流程的时序图说明。


步骤
流程
新用户在 Spotnana OBT 登录页输入邮箱后,点击 下一步
1
  • Spotnana UI 向 Spotnana 服务器发送 API 请求,获取该用户的认证配置信息。请求参数中包含用户的登录凭证。
  • 返回结果会包含用户的 tmcIdorgIdauthProviderType
1 a

用户输入新密码后,点击 下一步

2
  • Spotnana UI 向 Spotnana IdP 发送 API 请求,注册用户信息,包括 clientId、邮箱和新密码。
  • 注册完成后,系统会向用户邮箱发送一次性验证码(OTP)。
3
  • 用户在 Spotnana UI 中输入 OTP 后,点击 验证
  • Spotnana UI 向 Spotnana IdP 发送请求,校验 OTP 并生成用于登录的 bearer token。
  • bearer token 生成后返回给 Spotnana UI,表示用户已成功认证,可以使用 bearer token 访问 Spotnana 平台。
4
  • 用户通过第 3 步认证后,后续所有 API 请求都必须在请求头中带上 bearer token、 orgIdtmcId
  • 所有 API 请求中的 bearer token 都会被校验,校验通过后再返回响应给 Spotnana UI。


基于 IdP 的认证

Spotnana 支持通过 Google、Azure 以及自定义 IdP(基于 OpenID Connect 或 SAML 协议)进行认证。下方时序图和步骤说明了基于 IdP 的认证流程。

图示: 基于 IdP 认证流程的时序图说明。


步骤流程
用户通过 OBT 或 Spotnana 手机 App,输入邮箱进行登录。
1
  • Spotnana UI 向 Spotnana 服务器发送 API 请求,获取该用户的认证配置信息。请求参数中包含用户的登录凭证。
  • 返回结果会包含用户的 tmcIdorgIdauthProviderType
2

Spotnana UI 将请求重定向到 Spotnana IdP。

3

Spotnana IdP 再将请求重定向到合作伙伴的 IdP,正式发起用户的 IdP 认证流程。

说明: 每次重定向时,都会返回 302 状态码,表示请求已跳转到新的 URL。
4

Spotnana IdP 与合作伙伴 IdP 建立连接,用于确认用户已通过合作伙伴 IdP 的认证。

说明: 在此过程中,Spotnana IdP 会将 clientIdclientSecret 以 form URL-encoded 形式通过 API 发送给合作伙伴 IdP。如果 IdP 服务器无法处理该数据格式,Spotnana 服务器可以作为代理,转换为合作伙伴 IdP 能识别的格式。
5

合作伙伴 IdP 成功认证用户。

说明: 此时,用户资料还需要通过 bearer token 验证。
5 a

认证成功后,合作伙伴 IdP 会将认证结果返回给 Spotnana IdP。

5 b

Spotnana IdP 为该用户生成唯一 code,并返回给 Spotnana UI。

6
  • Spotnana UI 使用 clientID 和第 5(b) 步获得的 code,向 Spotnana IdP 发送 API 请求。
  • Spotnana IdP 生成新的 bearer token 并返回给 Spotnana UI。
说明: bearer token 创建成功,即表示用户已通过认证,可以访问 Spotnana。
7
  • 用户通过第 6 步认证后,后续所有 API 请求都必须在请求头中带上 bearer token、 orgIdtmcId
  • 所有 API 请求中的 bearer token 都会被校验,校验通过后再返回响应给 Spotnana UI。


API 认证

如果合作伙伴通过 Spotnana API 对接平台,可以使用我们的认证接口为用户生成 bearer token。下方时序图展示了 API 认证的整体流程。

图示: API 认证流程的时序图说明。


步骤流程
1

API 用户向 Spotnana 服务器的 POST 接口 get-auth-token(clientId,clientSecret) 发起请求,生成并获取临时 bearer token。

下面是调用 get-auth-token 接口的 cURL 请求示例:

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 服务器调用 Spotnana IdP 的 getToken(clientId,clientSecret) 方法,生成临时 bearerToken 并返回给 Spotnana 服务器。
  • Spotnana 服务器将该 bearer token 以 JSON 格式返回给 API 用户。


API 用户拿到 bearer token 后,后续访问 Spotnana 各类 API(如 差旅 API)时,需在请求头中带上 bearer token 进行授权。 

说明: 接口 get-auth-token(clientId, clientSecret) 每 5 分钟最多可调用 100 次。


iFrame 认证

iFrame 或嵌入式方案是指合作伙伴将 Spotnana UI 嵌入到自己的 UI 中,用户通过合作伙伴界面访问 Spotnana。在这种场景下,用户认证是通过合作伙伴系统和 Spotnana 之间的令牌交换来完成的。

说明:在 iFrame 认证场景下,登录用户通常被称为 caller。这是为了适配某些特殊场景,比如 API/机器用户登录后,为其他用户申请 access token。这类 API/机器用户可能会用 TMC 管理员账号直接连接 Spotnana 服务器。因此,文档中统一用 caller 来泛指登录自己账号的用户,或为他人申请 access token 的 API/机器用户。


下方时序图展示了 Spotnana 与合作伙伴服务器之间通过令牌交换实现认证的流程。

图示: 基于令牌交换的 iFrame 认证流程时序图说明。


步骤流程
caller 通过合作伙伴 UI 登录。
1合作伙伴 UI 通过 iFrame 加载 Spotnana UI。
2Spotnana UI 通过 post message 向合作伙伴 UI 发送请求,获取令牌。请求参数为 type=TOKEN_EXCHANGE_REQUEST
3

合作伙伴 UI 向合作伙伴服务器发起 API 请求,获取 OAuth 令牌,进入后续认证流程。

3 a

合作伙伴服务器调用 Spotnana 服务器,传入用户凭证和 subject token。Spotnana 服务器会判断请求是否来自 API/机器用户。

3 b
  • Spotnana 服务器调用合作伙伴服务器,获取 subject(即 caller)的邮箱。
  • 邮箱信息返回给 Spotnana 服务器,用于识别用户身份。
3 c
  • Spotnana 服务器将 access token 和 refresh token 返回给合作伙伴服务器,作为第 1 步 API 请求的响应。
  • 这些信息随后会传递给合作伙伴 UI。
4

合作伙伴 UI 通过 post message,将 token 发送给 Spotnana UI,参数为 type=TOKEN_EXCHANGE_RESPONSE.

5
  • Spotnana UI 向 Spotnana 服务器发起 API 请求,生成并获取新的 bearer token。
  • Spotnana 服务器生成 bearer token 后返回给 Spotnana UI。
说明: bearer token 创建成功,即表示用户已通过认证,可以访问 Spotnana。
6
  • 用户通过第 3 步认证后,后续所有 API 请求都必须在请求头中带上 bearer token、 orgIdtmcId
  • 所有 API 请求中的 bearer token 都会被校验,校验通过后再返回响应给 Spotnana UI。


授权码认证

下方时序图展示了基于授权码的认证流程。

图示: 基于授权码认证流程的时序图说明。


步骤流程
1

合作伙伴 UI 调用合作伙伴服务器,获取 caller 的授权码。授权码返回给合作伙伴 UI。

2

合作伙伴 UI 通过自定义重定向 URL,将 tmcIdauthCode 作为参数,发送请求到 Spotnana UI。

3

Spotnana UI 通过 POST API 向 Spotnana 服务器发起请求,接口为 v2/auth/token/companies/<tmcId>(authCode)

3 a
  • Spotnana 服务器通过授权码,向合作伙伴服务器请求用户的 pid
  • 用户的 pid 返回给 Spotnana 服务器。
3 b

Spotnana 服务器生成 access token 和 refresh token,并返回给 Spotnana UI。

4
  • Spotnana UI 使用 access token 和 refresh token,向 Spotnana 服务器请求生成 bearer token。
  • bearer token 生成后返回给 Spotnana UI。
说明: bearer token 创建成功,即表示用户已通过认证,可以访问 Spotnana。
5
  • 用户通过第 4 步认证后,后续所有 API 请求都必须在请求头中带上 bearer token、 orgIdtmcId
  • 所有 API 请求中的 bearer token 都会被校验,校验通过后再返回响应给 Spotnana UI。


说明: 如果 TMC 管理员允许多个用户用同一个邮箱登录,则无法使用该认证流程。


机器对机器(M2M)认证

M2M 认证适用于客户端应用需要访问第三方回调 URL,为用户生成 accessToken 的场景。下方时序图展示了 M2M 认证流程。

图示: M2M 认证流程的时序图说明。


步骤流程
所有参与认证的应用公钥会在 Spotnana 服务器与 Spotnana IdP 之间同步,后续认证流程中会用来校验 access token。
1

合作伙伴服务器向 Spotnana IdP 的 /oauth2/token(clientId,clientSecret) 接口发送 API 请求,生成 bearer token。新生成的 bearer token 会返回给合作伙伴服务器。

2
  • 合作伙伴服务器向第三方回调 URL 发送 API 请求,为用户生成 access token。
  • access token 创建后,发送给 Spotnana 服务器。
3
  • Spotnana 服务器会用之前同步的公钥校验 access token 签名,并校验 claim_id ,确认合作伙伴身份。
  • access token 会返回给合作伙伴服务器,用于用户认证。




这篇文章有帮助吗?

很好!

感谢您的反馈。

抱歉我们没能带来帮助

感谢您的反馈。

告诉我们可以如何改善此文档!

选择至少一个原因
需要进行 CAPTCHA 验证

反馈已发送

感谢,我们将试着改善此文档。