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
如下图所示:

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

注册成功之后进入到下面的页面:
- Client ID:就是等会配置需要的客户端 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 |
|---|---|
| 访问令牌 URL | https://github.com/login/oauth/access_token |
| 授权 URL | https://github.com/login/oauth/authorize |
| 用户信息 URL | https://api.github.com/user |
5、进行配置
回到 ThingsBoard 的 OAuth2 页面进行配置,启用 OAuth2 设置:

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

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

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

将第 3、4 节拿到的信息填入对应项(示意):
| 配置项 | 填写内容 |
|---|---|
| Client ID | 你在 GitHub 申请到的 Client ID |
| Client Secret | 你在 GitHub 生成的 Client secrets |
| 访问令牌 URL | https://github.com/login/oauth/access_token |
| 授权 URL | https://github.com/login/oauth/authorize |
| 用户信息 URL | https://api.github.com/user |
6、验证
退出登录 ThingsBoard,然后看到登录首页如下所示(会出现 GitHub 等第三方入口):

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

OAuth2.0 认证需要的参数(GitHub 清单)
便于对照填写(密钥请用你自己的,勿照抄示例):
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 一致,需单独适配。
