最近在调研小团队 ChatOps 中 Slack 的替代方案,最后在 MatrixRocket.ChatMicrosoft Teams 中选择了 Rocket.Chat。

Rocket.Chat 的安装配置可参考官方文档,此处不再赘述。本文主要记录官方认证配置文档未包含的,添加自定义 OAuth 认证以便用户使用 Microsoft 账号注册和登录的配置过程。

效果

先放一张配置完成后的成果截图。

通过 Microsoft 登录

添加自定义 OAuth 认证

打开 Rocket.Chat 管理后台,在 OAuth 下点击 “Add Custom OAuth”,取一个名字。重定向 URI(回调 URL) 中会包含这个名称,请认真选择。

添加后页面中会显示出回调 URL,复制下来备用。

注册 Microsoft 应用

Azure 管理门户 - 应用注册 中选择“新注册”一个应用。

这里注册的应用分为两类:

  • 归属于 Azure AD 中的应用:此类应用如果 受支持的帐户类型任何组织目录中的帐户和个人 Microsoft 帐户(例如,Skype、Xbox、Outlook.com),需要使用此应用的 个人 Microsoft 帐户 必须加入对应的 Azure AD 才能使用。
  • 个人账户中的应用程序:不属任何 Azure AD 、只在此当前账户的 Azure 门户中管理,此类应用如果 受支持的帐户类型任何组织目录中的帐户和个人 Microsoft 帐户,需要使用此应用的 个人 Microsoft 帐户 可以直接使用此应用。

如果需要创建个人账户中的应用程序,需要切换到对应的列表进行操作。

填写名称和重定向 URI(回调 URL),在“受支持的账户类型”中按需选择。

在“概述”中复制应用程序(客户端)ID 备用。

如果需要无后端服务参与的登录功能,在“身份验证 - 高级设置 - 隐式授权”中,打开“访问令牌”和“ID 令牌”,保存。

在“证书和密码 - 客户端密码”中,新建一个客户端密码;新建完成后,复制自动生成的客户端密码(Client Secret) 备用。由于安全原因,这个密码只会显示这一次

配置自定义 OAuth 认证

回到“Rocket.Chat 管理 - OAuth”,在刚刚新建的自定义 OAuth 中修改配置(下图中行末有“重置”按钮的配置项)。

根据接受的用户的区别,填写的内容略有不同。

在使用个人账户登录时,由于 Rocket.Chat 的实现仅从“userinfo endpoint”中获取信息,导致无法获取用户的邮件地址,需要用户完成注册后手动设置,或者使用 oidc-oauth-adapter 这个工具进行辅助对接。

登录账户仅公司、机构和学校账户包含个人账户
要求的版本v1.0v2.0
URLhttps://login.microsoftonline.com/{tenant} (tenant 为租户名称或ID,多租户情况下使用 common)https:// (仅占位,若为空,移动客户端将不会显示此登陆方式)
Token 路径/oauth2/tokenlogin.microsoftonline.com/common/oauth2/v2.0/token
身份令牌发送自标头标头
身份路径/openid/userinfograph.microsoft.com/oidc/userinfo
授权路径/oauth2/authorizelogin.microsoftonline.com/common/oauth2/v2.0/authorize
ID客户端 ID客户端 ID
Secret客户端密码客户端密码
按钮文字Login via MicrosoftLogin via Microsoft
合并用户

至此,配置完成!

参考: