Skip to content

ThingsBoard 配置 OAuth2 ​

正文与配图来自原稿。本文以 GitHub 授权登录为例;微信 / QQ 等国内 IdP 需另行申请与审核。
安全提醒: 切勿在文档或公开仓库中粘贴真实的 Client Secret。若密钥曾泄露,请到 GitHub 应用设置中轮换 / 作废后重新生成。

1、概述 ​

如果你的系统想要接入第三方认证来登录,就像国内很多网站都支持微信、QQ、支付宝等授权登录,其实 ThingsBoard 也提供了 OAuth2.0 来支持。

ThingsBoard 支持用授权码授权类型来交换访问令牌;同时它自己也提供了几种方式:Google、GitHub、Facebook、Apple;同时也支持自定义,可以配置微信或者 QQ 这些来授权登录。

但是国内这些微信、QQ 需要审核你一个网站才能给你 key 和 secret。我先讲解使用 GitHub 来配置认证,后续再去试一下微信和 QQ。我尝试了,微信和 QQ 体验一般:传递的字段都不标准,微信的字段不一致,QQ 还叫我审核,连在哪里提交资料都不清楚。

2、参考文档 ​

GitHub:

https://docs.github.com/zh/developers/apps/building-oauth-apps/authorizing-oauth-apps

3、申请 Client ID 和 Client Secret ​

首先你需要有能够登录 GitHub 的账号,需要先登录才行,然后打开链接进入申请应用页面:

https://github.com/settings/applications/new

如下图所示:

GitHub 注册 OAuth App

填写应用相关的内容,然后保存:

字段说明
Application name你的应用名称,随便起
Homepage URL应用主页访问地址(原稿示例随便填了一个百度地址;请改成你自己的站点)
Authorization callback URL回调 ThingsBoard 的地址,固定为:http://localhost:8080/login/oauth2/code/

填写 Homepage 与 Callback URL

注册成功之后进入到下面的页面:

  • Client ID:就是等会配置需要的客户端 ID
  • Client secrets:就是等会配置需要的客户端密钥(只在创建时完整展示一次,请妥善保存)

Client ID 与 Client secrets

若你的 ThingsBoard 不是本机 localhost:8080,Callback URL 请改成:
http(s)://你的域名或IP:端口/login/oauth2/code/
并与 GitHub 应用里登记的地址完全一致。

4、准备 GitHub 认证需要的请求地址 ​

我们需要调用 GitHub 的接口进行认证授权,这些接口如何获取可参考:

https://docs.github.com/zh/developers/apps/building-oauth-apps/authorizing-oauth-apps

需要的访问 URL 如下:

用途URL
访问令牌 URLhttps://github.com/login/oauth/access_token
授权 URLhttps://github.com/login/oauth/authorize
用户信息 URLhttps://api.github.com/user

5、进行配置 ​

回到 ThingsBoard 的 OAuth2 页面进行配置,启用 OAuth2 设置:

启用 OAuth2

点击右侧的【v】符号展开页面:

展开 OAuth2 配置

点击添加一个 provider,默认选择的是 Google,修改为 GitHub:

添加 Provider 并选 GitHub

再进行配置 Mapper,然后保存即可:

配置 Mapper 并保存

将第 3、4 节拿到的信息填入对应项(示意):

配置项填写内容
Client ID你在 GitHub 申请到的 Client ID
Client Secret你在 GitHub 生成的 Client secrets
访问令牌 URLhttps://github.com/login/oauth/access_token
授权 URLhttps://github.com/login/oauth/authorize
用户信息 URLhttps://api.github.com/user

6、验证 ​

退出登录 ThingsBoard,然后看到登录首页如下所示(会出现 GitHub 等第三方入口):

登录页出现 OAuth 入口

点击登录,授权成功后直接进入系统:

OAuth 登录进入系统

OAuth2.0 认证需要的参数(GitHub 清单) ​

便于对照填写(密钥请用你自己的,勿照抄示例):

text
Client ID:        <你的 Client ID>
Client secrets:   <你的 Client Secret>
访问令牌 URL:     https://github.com/login/oauth/access_token
授权 URL:         https://github.com/login/oauth/authorize
用户信息 URL:     https://api.github.com/user
回调 URL(GitHub 应用里登记):
http://localhost:8080/login/oauth2/code/

补充(辅) ​

  • ThingsBoard 内置模板还有 Google / Facebook / Apple;自定义 IdP 时重点对齐授权、令牌、用户信息三个 URL 与字段映射(Mapper)。
  • 生产环境请使用 HTTPS,并保证 Callback URL 与 IdP 控制台登记一致。
  • 首次第三方登录会按 Mapper / 租户策略创建或关联用户,权限范围请在系统层策略里想清楚。
  • 国内微信、QQ 等需企业主体与审核,字段也未必与通用 OIDC 一致,需单独适配。

相关文章 ​