产品定价 立即试用
云平台
欧洲地区
文档 > 安全 > OAuth 2.0
入门
指南 API 常见问题
目录

OAuth 2.0

ThingsBoard支持基于OAuth 2.0的认证,为客户提供单点登录(SSO),并与外部身份提供商集成。

使用OAuth 2.0,您可以让用户使用外部平台的现有账号登录,并自动创建tenant、customer或sub-customer。

ThingsBoard兼容大多数OAuth 2.0提供商,包括GoogleFacebookGithubAuth0KeycloakOktaAzure等。

OAuth 2.0认证流程

ThingsBoard支持OAuth 2.0的Authorization Code授权类型。认证流程如下:

  1. 用户打开ThingsBoard登录页面并选择外部提供商(例如Google或Keycloak)。
  2. 用户被重定向到提供商的登录页面进行身份认证。
  3. 登录成功后,提供商使用配置的重定向URI将用户重定向回ThingsBoard。
  4. ThingsBoard从重定向URL中提取授权码,并将其兑换为访问令牌。
  5. ThingsBoard获取外部用户信息,并使用配置的映射器(BasicCustom)。
  6. 映射步骤完成后,应用标准ThingsBoard授权流程。

该流程使ThingsBoard能够根据身份提供商属性自动确定正确的tenant、customer和用户权限。

通过外部提供商配置认证

要启用通过外部提供商的OAuth 2.0认证,您必须配置两个组件:

  • OAuth 2.0客户端 – 存储提供商凭证、端点、scope和映射规则。
  • 域配置 – 定义特定ThingsBoard域可用的OAuth客户端。

一般配置流程包括:

  1. 在外部提供商创建OAuth 2.0客户端并获取 Client IDClient Secret
  2. 在ThingsBoard中添加对应的OAuth 2.0客户端,并配置所有必需的端点、scope和mapper设置。
  3. 在ThingsBoard中将OAuth 2.0客户端分配给域。
  4. 使用ThingsBoard登录页面上的新 使用 …登录 选项验证登录流程。

添加OAuth 2.0客户端

ThingsBoard允许您配置OAuth 2.0客户端,用于通过Google、GitHub、Apple、Facebook、Keycloak、Auth0、Okta、Azure AD等外部身份提供商对用户进行认证。

OAuth 2.0客户端存储认证所需的全部信息,包括:

  • 客户端凭证(Client ID / Client Secret)
  • OAuth端点(Authorization、Token、UserInfo、JWKS)
  • 必需的scope
  • 用户映射规则(mapper配置)

OAuth 2.0客户端创建后,可分配给一个或多个域。

添加新的OAuth 2.0客户端:

  • 登录ThingsBoard。
  • 导航至 Security ⇾ OAuth 2.0
  • 打开 OAuth 2.0客户端 选项卡。
  • 点击 +(加号)图标。

步骤1: 配置常规客户端信息

在对话框的上部分,配置基本参数:

  • Title 输入OAuth 2.0客户端的描述性名称(例如:Google、Auth0、Keycloak、GitHub)。此字段是必填的。
  • Provider 从下拉列表中选择认证提供商。支持的提供商包括:Apple、Custom、Facebook、GitHub、Google。 提供商选择定义了默认端点模板和映射行为。

    提示:如果你的提供商不在列表中(例如Keycloak、Okta、Azure AD、Auth0等),选择Custom。

  • Allowed platforms 选择哪些ThingsBoard平台可以使用此OAuth客户端。例如:仅Web UI、仅移动应用或所有平台(默认)。 此选项用于限制特定客户端的认证方法。
  • Client ID和Client secret 输入从身份提供商获取的OAuth 2.0凭证:
    • Client ID(必填)
    • Client secret(必填)

第2步:配置高级设置(常规)

展开高级设置部分并打开常规选项卡。此部分定义了身份验证期间使用的OAuth 2.0端点。

  • 访问令牌URI
    定义ThingsBoard用于将授权码交换为访问令牌的提供商端点。示例 (Google):https://oauth2.googleapis.com/token
  • 授权URI
    定义用户被重定向进行身份验证的端点。示例 (Google):https://accounts.google.com/o/oauth2/v2/auth
  • JSON Web Key URI
    定义JWKS端点,该端点提供验证JWT令牌所需的公钥。示例 (Google):https://www.googleapis.com/oauth2/v3/certs
  • 用户信息URI
    定义ThingsBoard用于请求用户详细信息的端点。示例 (Google):https://openidconnect.googleapis.com/v1/userinfo
  • 客户端认证方法
    定义ThingsBoard在从OAuth 2.0提供商请求访问令牌时如何发送客户端凭证客户端ID客户端密钥)(在授权代码交换为访问令牌期间)。
    此参数必须与身份提供商支持(或要求)的方法匹配。
    根据UI,以下认证方法可用:
    • 。ThingsBoard在请求访问令牌时不发送客户端凭证。
      此选项很少使用,仅适用于不需要客户端认证的提供商(通常是公共客户端)。
    • 基本对大多数提供商推荐)。ThingsBoard使用HTTP基本认证标头发送客户端凭证:Authorization: Basic <base64(client_id:client_secret)>
      这是最常见且广泛支持的选项(例如,Google、Keycloak、Auth0、Okta)。
    • POST。ThingsBoard在POST请求体中与令牌请求参数一起发送客户端凭证。
      某些OAuth提供商可能需要此方法,具体取决于其配置。

      提示:如果令牌交换期间认证失败(例如,由于invalid_client),请验证所选的客户端认证方法是否与身份提供商配置匹配。

  • 允许用户创建
    如果启用,ThingsBoard将在首次登录时自动创建新用户账户(如果用户不存在)。
    此选项用于完全自动化的SSO上线流程。
  • 启用用户
    如果启用,ThingsBoard将自动激活创建的用户账户。
    如果禁用,用户将被创建但保持不激活状态,直到管理员手动激活。
  • 作用域(Scope)
    作用域定义ThingsBoard从身份提供商请求的信息。示例:email openid profile
    作用域直接影响哪些属性可用于用户映射(电子邮件、名称等)。

步骤3.配置高级设置(映射器)

切换到”映射器”选项卡。此部分定义ThingsBoard如何将外部用户信息对象转换为内部ThingsBoard用户,并决定:

  • 租户名称
  • 客户名称
  • 用户权限(Tenant Admin / Customer User)
  • 可选用户组(仅PE)
  • 默认仪表盘导航设置

ThingsBoard支持不同的映射器类型:基本、自定义、GitHub、Apple

映射器配置是OAuth设置的关键部分,因为它控制自动租户/客户供应逻辑。 有关将外部用户信息映射到ThingsBoard用户的更多详细信息,请参见此处

步骤4.保存OAuth 2.0客户端

填写所有必填字段后,点击添加以创建OAuth 2.0客户端。

创建后,OAuth客户端就可用于域分配了。

将OAuth 2.0客户端分配给域

创建OAuth 2.0客户端后,您必须将其分配给域。 此步骤定义用户通过特定域访问ThingsBoard时,登录页面上将显示哪些认证提供商

在ThingsBoard中,域配置充当路由层:当用户打开登录页面时,ThingsBoard确定该域并显示分配给该域的OAuth 2.0登录选项。

打开域配置

要将OAuth 2.0客户端分配给域:

  • 登录您的ThingsBoard实例。
  • 导航至安全性 ⇾ OAuth 2.0
  • 选项卡上,点击+加号)图标。

这将打开添加域对话框窗口。

步骤1.配置域名

域名字段中,输入用户将用来访问ThingsBoard的域。示例:my.thingsboard.instance
此值必须与DNS中配置的和浏览器中使用的实际域相匹配。

步骤2.验证重定向URI模板

ThingsBoard自动根据输入的域生成重定向URI模板。例如:https://my.thingsboard.instance/login/oauth2/code/

此重定向URI必须添加到您的OAuth提供商配置(Google、Auth0、Keycloak等)中作为允许的回调/重定向URL。

要快速复制,请单击字段右侧的复制图标。

步骤3.分配OAuth 2.0客户端

OAuth 2.0客户端部分中,选择应为此域提供OAuth客户端。

有两个可用选项:

  • 选项A.选择现有OAuth 2.0客户端
    • OAuth 2.0客户端字段中点击。
    • 从下拉列表中选择现有客户端。

    选择后,它将以标签形式出现在字段中。

    您可以为同一域分配多个OAuth客户端(例如,Google + Auth0 + Keycloak)。

  • 选项B.创建新OAuth 2.0客户端
    • 如果所需OAuth客户端不存在,点击创建新

    此步骤将打开添加OAuth 2.0客户端对话框,允许您创建新的OAuth客户端,无需离开当前域设置页面。

可选设置

  • 启用OAuth 2.0
    如果此选项被禁用,即使分配了OAuth客户端,域内OAuth登录也不可用。
  • 同步到Edge
    如果您使用ThingsBoard Edge且希望OAuth设置应用于Edge侧,请启用同步到Edge开关。
    此配置会将OAuth域配置同步到已连接的Edge实例。

步骤4.保存域

点击添加以创建域配置。

结果

域成功创建且OAuth 2.0设置已启用后:

  • ThingsBoard将在登录页面上显示分配的OAuth提供商。
  • 通过此域访问ThingsBoard的用户将能使用配置的OAuth 2.0客户端进行认证。
  • 用户配置和角色映射将遵循在分配OAuth客户端中配置的映射器设置。

映射器部分定义ThingsBoard如何将外部身份提供商的用户信息转换为ThingsBoard用户。

用户成功与OAuth 2.0提供商认证后,ThingsBoard会接收外部用户信息对象(或ID令牌声明)。 映射器负责提取所需属性(电子邮件、名字、姓氏),并配置用户参数与角色分配。

使用映射器设置,ThingsBoard可以自动:

  • 创建用户账户。
  • 为其分配租户和/或客户。
  • 在租户/客户不存在时自动创建。
  • 将用户加入指定用户组并设置权限。

映射器配置位于创建或编辑OAuth 2.0客户端时的高级设置→映射选项卡中。

映射器参数

  • 用户名属性键
    大多数OAuth提供商会返回电子邮件地址作为最稳定的标识,因此推荐值为:email
  • 映射器类型 ThingsBoard支持多种映射器类型,可用选项取决于所选提供商和ThingsBoard版本。支持的类型包括:BASICCUSTOMGITHUBAPPLE
    每种映射器定义了将外部身份数据映射到ThingsBoard实体的不同方式。

基本映射器

为标准OpenID Connect提供商设计,这些提供商返回典型的用户属性,如电子邮件/名字/姓氏

此映射器支持使用可配置策略和模式的自动租户/客户供应。

您可以配置什么
基本映射器为您提供了一套可预测的控件:

  • 电子邮件属性密钥。此字段是必需的,因为电子邮件通常用作ThingsBoard中的唯一标识符。默认值:email
  • 名字/姓氏属性密钥 - 告诉ThingsBoard使用哪些外部字段。
  • 租户名称策略。租户名称策略定义ThingsBoard如何为经过身份验证的用户确定租户名称。可用策略:
    • - 租户名称源自电子邮件域。这是SaaS环境的最佳选择,其中每个公司都使用自己的电子邮件域。
      示例:如果用户电子邮件是: john.doe@company.com ⇾ 那么租户名称将是: company.com
    • 电子邮件 - 租户名称等于完整的电子邮件地址。此策略通常用于测试或每个用户应该有隔离租户的情况。
      示例: john.doe@company.com
    • 自定义 - 租户名称使用自定义模式生成。这是最灵活的策略,建议您在想要从用户属性构建租户名称时使用。
      示例: %{email}
  • 租户名称模式。如果租户名称策略自定义,您可以使用自定义模式指定将在其中创建用户的租户的名称。 您可以使用外部用户信息对象中的属性将它们放入租户的名称中。请使用 %{attribute_key} 作为属性值的占位符。

    租户模式示例:

    • Demo Tenant # 固定租户名称;
    • Demo Tenant %{email} # 若用户邮箱为”test@demo.com”,租户名称将为”Demo Tenant test@demo.com”;
    • %{givenName} # 若用户givenName为”Demo User”,租户名称将为”Demo User”
  • 客户名称模式用于定义新用户应分配的客户名称。
    可使用外部用户信息对象中的属性拼接客户名称,请使用%{attribute_key}作为属性值占位符。

    客户名称模式示例:

    • Demo Customer # 固定客户名称;
    • Demo Customer %{email} # 若用户”email”为”test@demo.com”,客户名称将为”Demo Customer test@demo.com”;
    • %{city} # 若用户”city”为”New York”,客户名称将为”New York”
  • 默认仪表板名称用于指定登录后打开的仪表板。
    若该仪表板存在且对用户可见,将自动打开。

  • 始终全屏。当该选项启用且默认仪表板名称不为空时,用户将以全屏模式打开指定仪表板。

  • 父客户名称模式允许在创建客户时自动将其挂到父客户(子客户层级)下。这在OAuth开通过程中自动构建多级客户结构时非常有用。

    父客户名称模式示例:

    • Demo Parent Customer # 固定的父客户名称;
    • Demo Parent Customer %{email} # 如果用户的 “email” 属性为 “test@demo.com”,父客户名称将为 “Demo Parent Customer test@demo.com”;
    • %{country} # 如果用户的 “country” 属性为 “Top Customer”,父客户名称将为 “Parent Customer”
  • 用户组名称模式允许ThingsBoard自动将创建的用户添加到一个或多个用户组。默认情况下,新创建用户只会被分配到 All 用户组。
    你可以使用外部用户信息对象中的属性来构建用户组名称,请使用 %{attribute_key} 作为属性值占位符。 如果用户组不存在,将自动创建。

    用户组名称模式示例:

    • Tenant Administrators, Customer Users, Managers.. # 固定用户组
    • %{job_title} # 如果用户的 “job_title” 属性为 “Manager”,用户将被分配到 “Manager” 用户组

自定义映射器

自定义映射器用于基本映射器不够且需要更复杂开通逻辑的场景。
使用自定义映射器时,ThingsBoard将映射逻辑委托给外部服务。

它允许你实现:

  • 基于IdP群组/角色的角色映射;
  • 复杂的租户/客户创建规则;
  • 与外部CRM/ERP系统集成;
  • 允许列表、校验或许可证检查。

工作原理

  1. ThingsBoard从提供商接收外部用户信息对象。
  2. ThingsBoard将该对象发送到你的自定义映射端点。
  3. 你的服务返回ThingsBoard兼容的用户映射响应。
  4. ThingsBoard根据响应创建或更新用户。

自定义映射器适合对用户开通要求严格的企业部署。

示例

使用Google登录

此示例演示如何使用Google OpenID Connect 配置OAuth 2.0认证。

配置完成后:

  • 用户可以使用Google账号登录;
  • ThingsBoard会在租户不存在时自动创建;
  • 租户名称从用户的电子邮件地址派生;
  • 用户以租户管理员身份登录。

用户映射默认使用内置Basic mapper,如果需要更复杂的开通逻辑,可使用Custom mapper

第1步:在Google API控制台中创建项目

要使用Google OAuth 2.0认证,请在Google API控制台 中创建项目并生成OAuth 2.0凭证。

按照OpenID Connect文档页面 上的官方指引操作,或按照下文步骤执行:

  • 导航到凭证
  • 点击创建凭证 → OAuth客户端ID
  • 指定客户端名称(例如ThingsBoard)。
  • ThingsBoard重定向URI添加到授权重定向URI字段:
1
http(s)://$DOMAIN:$PORT/login/oauth2/code/

其中:
 • $DOMAIN 为ThingsBoard主机名(或IP地址)
 • $PORT 为ThingsBoard实例的HTTP/HTTPS端口

示例:

1
https://my.thingsboard.instance/login/oauth2/code/
  • 点击创建

Google将生成OAuth 2.0凭证。复制并保存以下值:

  • Client ID
  • Client Secret

下一步需要用到这些值。

第2步:在ThingsBoard中添加OAuth 2.0客户端

现在在ThingsBoard中配置Google的OAuth 2.0认证:

  • 登录ThingsBoard实例。
  • 导航至 Security ⇾ OAuth 2.0
  • Domains 选项卡中点击 +(加号)图标。
  • 输入域名(或IP地址)。
  • OAuth 2.0 clients 区域点击Create new

OAuth 2.0客户端配置窗口中:

  • 将标题设置为 Google
  • 提供商选择 Google
  • 如有需要设置允许的平台(或保持全选)。
  • 填写从Google Console 获取的 Client IDClient Secret

展开高级设置并配置以下参数:

  • 使用官方发现端点列表:Google Discovery
  • 将客户端认证方法设置为 POST
  • 启用允许用户创建
  • 作用域设置为:email openid profile

切换到映射器部分并配置:

  • 映射器类型:BASIC
  • 租户名称策略:CUSTOM
  • 租户名称模式:%{email}(这些属性的更多说明见下文“Basic mapper”部分)。

  • 点击Add创建OAuth 2.0客户端。
  • 再次点击Add确认域创建。

验证登录

现在打开ThingsBoard登录页面。你会看到使用Google登录按钮,点击并选择你的Google账号。

成功认证后,您将以租户管理员身份登录ThingsBoard。

使用Auth0登录

此示例演示如何使用Auth0 配置OAuth 2.0认证。

配置完成后:

  • 用户可以使用Auth0凭证登录;
  • ThingsBoard根据用户邮箱域创建或选择租户;
  • 对于每个用户,ThingsBoard还会创建一个名称与用户邮箱地址相同的客户;
  • 用户以客户用户身份登录。

用户映射默认使用内置Basic mapper,如需更高级的租户/客户开通规则,可使用Custom mapper

第1步:在Auth0管理控制台创建应用

在配置ThingsBoard之前,需要创建Auth0 应用并获取 Client IDClient Secret

操作步骤:

  • 打开Auth0管理控制台
  • 进入 Applications 并点击 Create Application
  • 应用名称填写 ThingsBoard
  • 选择 Regular Web Application
  • 技术类型选择 Java Spring Boot
  • 打开创建的应用并进入 Settings 选项卡。
  • 复制以下值:
    • Client ID
    • Client Secret

允许的回调URL字段中,添加ThingsBoard重定向URI:

1
http(s)://$DOMAIN:$PORT/login/oauth2/code/

其中:
 • $DOMAIN 为ThingsBoard主机名(或IP地址)
 • $PORT 为ThingsBoard实例的HTTP/HTTPS端口

示例:

1
https://my.thingsboard.instance/login/oauth2/code/
文档信息图标

注意:无需配置Application Login URI。

  • Advanced Settings 区域可以找到OAuth配置所需端点。
  • 点击 Save Changes

第2步:在ThingsBoard中添加OAuth 2.0客户端

在ThingsBoard中配置Auth0的OAuth 2.0认证:

  • 登录ThingsBoard实例。
  • 导航至 Security ⇾ OAuth 2.0
  • Domains 选项卡中点击 +(加号)图标。
  • 输入域名(或IP地址)。
  • OAuth 2.0 clients 区域点击Create new

OAuth 2.0客户端配置窗口中:

  • 标题设置为 Auth0
  • 提供商选择 Custom
  • 如有需要设置允许的平台(或保持全选)。
  • 填写来自Auth0控制台Client IDClient Secret

展开高级设置并配置:

  • 使用Auth0的 Advanced Settings 中的值填入所有必需端点。
  • 将客户端认证方法设置为 POST
  • 提供商标签设置为 Auth0
  • 作用域设置为:email openid profile

进入映射器块并配置:

  • 映射器类型:BASIC
  • 租户名称策略:DOMAIN
  • 客户名称模式:%{email}(这些属性的更多说明见下文“Basic mapper”部分)。

  • 点击Add创建OAuth 2.0客户端。
  • 最后再次点击Add确认域创建。

第3步:验证登录

现在打开ThingsBoard登录页面。你会看到使用Auth0登录按钮,点击并使用Auth0凭证完成认证。

成功认证后,您将以客户登录用户身份登录ThingsBoard。

使用Keycloak登录

此示例演示如何使用Keycloak(OpenID Connect)配置OAuth 2.0认证。

配置完成后:

  • 用户可以使用Keycloak凭证登录;
  • ThingsBoard会以租户管理员身份登录用户;
  • 租户名称从用户邮箱地址派生;
  • 若租户不存在,将根据映射器设置自动创建。

用户映射默认使用内置Basic mapper,若需要更复杂的身份到租户映射逻辑,可使用Custom mapper

第1步:创建Keycloak realm和OpenID Connect客户端

在配置ThingsBoard之前,需要创建Keycloak realm和OpenID Connect客户端,并获取所需OAuth 2.0凭证(Client IDClient Secret)。

你可以参考Keycloak官方文档,或按以下步骤操作。


启动Keycloak

本示例使用Docker在本地启动Keycloak。

  • 确保已安装Docker
  • 运行以下命令在8081端口启动Keycloak,并创建初始管理员用户(admin / admin):
1
docker run -p 8081:8080 -e KC_BOOTSTRAP_ADMIN_USERNAME=admin -e KC_BOOTSTRAP_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:26.0.5 start-dev


登录管理控制台


创建Realm
Realm是Keycloak中的“工作区”,用于管理应用与用户。

  • 点击realm选择器(默认:master)。
  • 点击Create realm
  • 将realm名称设为ThingsBoard
  • 点击Create


创建新客户端
客户端代表使用Keycloak认证的ThingsBoard应用。

  • 进入Clients并点击Create client
  • 将client ID设为thingsboard
  • Client type选择OpenID Connect
  • 点击Next
  • 启用Client authentication
  • 确保启用Standard flow
  • 点击Next
  • Login settings中添加ThingsBoard重定向URI:
1
http(s)://$DOMAIN:$PORT/login/oauth2/code/

其中:
 • $DOMAIN 为ThingsBoard主机名(或IP地址)
 • $PORT 为ThingsBoard实例的HTTP/HTTPS端口

示例:

1
https://my.thingsboard.instance/login/oauth2/code/
  • 点击保存

客户端成功创建后,复制凭证:

  • Client ID:在Settings选项卡中
  • Client Secret:在Credentials选项卡中

端点

ThingsBoard需要Keycloak端点用于OAuth 2.0客户端配置。
获取这些端点最简单的方式是通过OpenID Connect发现文档

  • 导航至 Realm settings
  • 找到并打开 OpenID Endpoint Configuration
  • 启用 Pretty-print 以便阅读。

从该文档中复制以下端点:

  • Authorization endpoint
  • Token endpoint
  • UserInfo endpoint
  • JWKS endpoint

关于可用端点的详细说明,请参见Keycloak文档:OIDC layers

创建用户

仅Keycloak中创建的用户可以通过Keycloak进行认证。

创建用户:

  • 导航至 Users
  • 点击 Create new user
  • 填写用户名和邮箱(名/姓为可选)。
  • 点击Create

设置密码:

  • 打开Credentials选项卡。
  • 点击Set password
  • 输入密码。
  • 关闭Temporary(避免首次登录强制改密)。
  • 点击Save

第3步:将OAuth 2.0客户端分配给域

现在在ThingsBoard中配置Keycloak:

  • 登录ThingsBoard。
  • 导航至Security ⇾ OAuth 2.0
  • 打开OAuth 2.0 clients选项卡并点击+plus)图标。
  • 标题设置为Keycloak
  • 提供商选择Custom
  • 如有需要指定允许的平台(或保持全选)。
  • 填写来自Keycloak Admin ConsoleClient IDClient Secret

展开Advanced settings(高级设置)并配置:

  • 使用OpenID Connect discovery document填写以下端点:Access Token URI、Authorization URI、JSON Web Key URI、User Info URI。
  • 设置:
    • 客户端认证方法:POST
    • 提供商标签:Keycloak
    • 作用域:email openid profile

配置映射器:

  • 映射器类型:BASIC
  • 租户名称策略:CUSTOM
  • 租户名称模式:%{email}(这些属性的更多说明见下文“Basic mapper”部分)。

  • 点击Add创建OAuth 2.0客户端。

添加域: 最后将域绑定到已创建的OAuth 2.0客户端:

  • 打开Domains选项卡并点击+(plus)图标。
  • 输入域名(或IP地址)。
  • 选择Keycloak作为OAuth 2.0客户端。
  • 点击Add

第4步:验证登录

打开ThingsBoard登录页面,你会看到Login with Keycloak按钮。点击并使用Keycloak凭证完成认证。

使用Okta登录

本指南说明如何在ThingsBoard中使用Okta配置OAuth 2.0认证。

配置完成后:

  • 用户可以使用Okta账号登录ThingsBoard;
  • 用户将以租户管理员身份登录;
  • 租户名称等于用户邮箱地址;
  • 若租户不存在,ThingsBoard将根据映射器配置自动创建。

用户映射默认使用内置Basic mapper,如需更复杂的开通逻辑,可使用Custom mapper

第1步:在Okta创建OAuth 2.0客户端

首先需要在Okta创建OAuth 2.0应用并获取Client ID与Client Secret。
操作步骤:

  • 打开Okta Developer Console
  • 进入Applications
  • 点击+ Create Application
  • 填写应用名称(例如ThingsBoard)。
  • 选择应用类型:Regular Web Application
  • 点击Create
  • Application Login URIs设置中填写ThingsBoard重定向URI
1
http(s)://$DOMAIN:$PORT/login/oauth2/code/

其中:
 • $DOMAIN 为ThingsBoard主机名(或IP地址)
 • $PORT 为ThingsBoard实例的HTTP/HTTPS端口

示例:

1
https://my.thingsboard.instance/login/oauth2/code/

点击Create

保存应用后,复制生成的值:

  • Client ID
  • Client Secret

这些值将在配置ThingsBoard时使用。

第2步:在ThingsBoard中添加OAuth 2.0客户端

在ThingsBoard中将Okta配置为OAuth 2.0客户端。

  • 登录ThingsBoard实例。
  • 导航至Security ⇾ OAuth 2.0
  • 打开OAuth 2.0 clients选项卡。
  • 点击+plus)图标。

OAuth 2.0 client配置窗口中:

  • 标题设置为Okta
  • 提供商选择Custom
  • 如有需要指定允许的平台(或保持All platforms)。
  • 填写从Okta获取的Client IDClient Secret

展开Advanced settings并配置以下参数:

  • Access token URI(示例:https://dev-example.okta.auth0.com/oauth/token
  • Authorization URI(示例:https://dev-example.okta.auth0.com/authorize
  • JSON Web Key URI(示例:https://dev-example.okta.auth0.com/.well-known/jwks.json
  • User info URI(示例:https://dev-example.okta.auth0.com/userinfo

Okta会提供所需的OAuth端点,可在Okta中获取:
 • 在Okta Developer Console中打开应用(ThingsBoard)。
 • 进入Advanced settingsEndpoints,即可看到端点值。

配置其他参数:

  • Client authentication methodPOSTBASIC(Okta通常使用POST)。
  • 启用Allow user creation
  • 若希望自动激活用户,启用Activate user
  • scope设为:email openid profile

切换到Mapper部分并配置:

  • 映射器类型:BASIC
  • 租户名称策略:CUSTOM
  • 租户名称模式:%{email}(这些属性的更多说明见下文“Basic mapper”部分)。

  • 点击Add创建OAuth 2.0客户端。

第3步:将OAuth 2.0客户端分配给域

创建OAuth 2.0客户端后,必须将其分配给域。

  • 导航至SecurityOAuth 2.0
  • Domains选项卡编辑现有域或添加新域
  • OAuth 2.0 clients字段中选择Okta
  • 点击Add(Save)保存域配置。

第4步:验证登录

使用已配置的域打开ThingsBoard登录页面,你将看到Login with Okta按钮。

点击并使用Okta凭证完成认证。

认证成功后:

  • 若租户不存在,ThingsBoard将自动创建;
  • 用户以租户管理员身份登录;
  • 租户名称与用户邮箱一致。

使用Azure登录

本指南说明如何在ThingsBoard中使用Azure Active Directory(Microsoft Entra ID)配置OAuth 2.0认证。

配置完成后:

  • 用户可使用Azure AD账号进行认证;
  • 用户以租户管理员身份登录;
  • 租户名称等于用户邮箱地址;
  • 若租户不存在,ThingsBoard将根据映射器设置自动创建。

用户映射默认使用内置Basic mapper,如需更复杂的身份到租户映射逻辑,可使用Custom mapper

高级身份定制请参阅微软官方文档:Microsoft identity platform and OpenID Connect protocol

第1步:在Azure创建OAuth 2.0客户端

首先需要在Azure Active Directory中注册应用。
创建应用:

  • 打开Azure Portal
  • 进入Azure Active Directory
  • 打开App registrations
  • 点击New registration

配置应用:

  • Name:ThingsBoard(或任意描述性名称)
  • Supported account types:按组织要求选择
  • Redirect URI:
    • Platform:Web
    • URL:
      1
      
      http(s)://$DOMAIN:$PORT/login/oauth2/code/
      

其中:
 • $DOMAIN 为ThingsBoard主机名(或IP地址)
 • $PORT 为ThingsBoard实例的HTTP/HTTPS端口

示例:

1
https://my.thingsboard.instance/login/oauth2/code/
  • 点击Register

创建Client Secret

此时位于Overview页面,可找到之前设置的Application (client) IDClient name

接着打开Authentication选项卡,确保启用access token-based授权,并保存更改。

最后打开Certificates & secrets选项卡,点击+ New client secret,保存生成的密钥valueClient Secret)。

获取OAuth端点(OpenID配置)

ThingsBoard需要OAuth端点用于令牌交换与用户验证。

Azure通过OpenID Connect元数据文档提供这些端点:

1
https://login.microsoftonline.com/<TENANT_ID>/v2.0/.well-known/openid-configuration

从该文档中需要以下端点:

  • Authorization endpoint
  • Token endpoint
  • JWKS URI
  • UserInfo endpoint (optional)

第2步:在ThingsBoard中添加OAuth 2.0客户端

现在在ThingsBoard中创建对应的OAuth客户端。

  • 登录ThingsBoard。
  • 导航至Security ⇾ OAuth 2.0
  • 打开OAuth 2.0 clients选项卡。
  • 点击+plus)图标。

配置常规客户端设置

OAuth 2.0 client配置窗口中:

  • Title:Azure Active Directory
  • Provider:Custom
  • Allowed platforms:All platforms(或选择所需平台)
  • Client ID:粘贴Azure Application (client) ID
  • Client secret:粘贴Azure Client Secret

配置Advanced settings ⇾ General

展开Advanced settings并配置以下参数:

填写以下字段:

  • Authorization URI
  • Access token URI
  • JSON Web Key URI
  • User info URI(可选,取决于配置)

配置其他设置:

  • Client authentication methodPOST(推荐用于Azure)
  • 启用Allow user creation
  • 若希望自动激活用户,启用Activate user
  • Scope:email openid profile

配置Advanced settings ⇾ Mapper

切换到Mapper选项卡。
推荐的Basic mapper配置:

  • User name attribute key:email
  • Mapper type:BASIC
  • Email attribute key:email

设置租户开通策略:

  • Tenant name strategy:CUSTOM
  • Tenant name pattern:
    1
    
    %{email}
    

此配置确保:

  • 每个用户将登录到与其邮箱同名的租户;
  • 若租户不存在,将自动创建。

点击Add创建OAuth 2.0客户端。

第3步:将OAuth 2.0客户端分配给域

创建OAuth客户端后,必须将其分配给域。

  • 导航至Security ⇾ OAuth 2.0
  • Domains选项卡点击+plus)图标。

在Add domain对话框中:

  • 输入域名(或IP地址)。
  • OAuth 2.0 clients区域选择你的Azure OAuth client
  • 点击Add

第4步:验证登录流程

使用已配置的域打开ThingsBoard登录页面,你将看到Login with Azure选项。

点击按钮并使用Azure AD凭证完成认证。

认证成功后:

  • 若启用自动创建,用户会自动创建;
  • 若租户不存在,将自动创建;
  • 用户以租户管理员身份登录。

OAuth 2.0客户端的操作

可在OAuth 2.0 clients选项卡中管理OAuth 2.0客户端。

  • Add OAuth 2.0 client:点击+plus)图标,输入客户端标题,选择提供商与允许的平台,填写Client IDClient Secret,如需可配置高级设置,最后点击Add
  • Edit OAuth 2.0 client:打开客户端详情,点击橙色Edit按钮,更新配置后点击橙色Apply changes
  • Delete OAuth 2.0 client:点击客户端行中的垃圾桶图标并确认删除。

域的操作

可在Domains选项卡中管理OAuth 2.0域映射。

  • Add domain:点击+plus)图标,输入域名,选择一个或多个OAuth 2.0客户端,然后点击Add
  • Edit domain:打开域详情,点击橙色Edit按钮,更新配置后点击橙色Apply changes
  • Delete domain:点击域行中的垃圾桶图标并确认删除。

HaProxy配置

若ThingsBoard部署在HAProxy等负载均衡器后,请配置会话粘性,以确保OAuth流程始终由同一节点处理。

后端示例配置:

1
2
3
4
backend tb-api-backend
  ...
  balance source # balance must be set to 'source'
  ...

还需确保OAuth相关路径包含在HTTP的ACL映射中:

1
2
3
4
frontend http-in
  ...
  acl tb_api_acl path_beg /api/ /swagger /webjars /v2/ /static/rulenode/ /oauth2/ /login/oauth2/ # '/oauth2/ /login/oauth2/' added
  ...

以及HTTPS前端:

1
2
3
4
frontend https_in
  ...
  acl tb_api_acl path_beg /api/ /swagger /webjars /v2/ /static/rulenode/ /oauth2/ /login/oauth2/ # '/oauth2/ /login/oauth2/' added
  ...

您的反馈

如对本示例有任何疑问,请联系我们