对接企业自有SSO单点登录
2022-10-25 447
第一步、开启功能
进入租户端界面点击“插件”按钮,选择“站点权限”功能
找到企业自有sso登录授权功能列表
第二步、进入企业自有SSO配置界面
在企业自有的SSO后台开通一个第三方登录账号,填入第二步配置界面中的重定向地址(Redirect URL),获得以下信息:
- 应用ID(App ID)
- 应用密钥(App Secret)
- 适用范围(Scopes)
第三步、进入 Baklib “站点权限”配置页面
进入企业自有SSO登录授权配置板块,填写配置信息:
- 应用ID(App ID):从第二步获得
- 应用密钥(App Secret):从第二步获得
- 适用范围(Scopes):从第二步获得
- 授权URL(Authorization URL),该地址可以了解企业自有 SSO 服务的相关文档
- 访问令牌URL(Access Token URL),该地址可以了解企业自有 SSO 服务的相关文档
- 用户信息URL(User Info URL) ,该地址可以了解企业自有 SSO 服务的相关文档
完善用户信息的字段映射:
- 昵称字段:对应 User Info URL 返回的昵称字段,如:name
- 头像字段:对应 User Info URL 返回的头像字段,如:headshot
- 访问权限字段:对应 User Info URL 返回的访问权限字段,如:level,返回的值必须是0~10的整数,通常需要SSO特殊定制,如果不填此字段,用户的默认权限为1级
个性配置:
- 按钮文字
业务流程图
Baklib 对接企业自有 SSO 授权,采用的是国际标准 OAuth 2.0 (The OAuth 2.0 Authorization Framework) 方案,获取各种语言版本的 SDK 请访问 https://oauth.net/code/
配置实例:
- 重定向地址(Redirect URL):
https://help.company.com/-/xauth/sso_callback
- 应用ID(App ID):
app-abcdefg
- 应用密钥(App Secret):
secret-xxxxxx
- 适用范围(Scope):
public
- 授权URL(Authorization URL):
https://sso.company.com/oauth/authorize
- 访问令牌URL(Access Token URL):
https://sso.company.com/oauth/access-token
- 用户信息URL(User Info URL):
https://sso.company.com/api/users/profile
- 用户信息的字段映射:
- 昵称字段:
nickname
- 头像字段:
image
- 访问权限字段:
level
- 昵称字段:
HTTP 请求过程
- 第2步:用户浏览器从 Baklib 站点跳转到企业 SSO 登录界面
- 跳转链接:
https://sso.company.com/oauth/authorize?client_id=app-abcdefg&redirect_uri=https%3A%2F%2Fhelp.company.com%2F-%2Fxauth%2Fsso_callback&response_type=code&scope=public
- 参考文档: https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.1
- 跳转链接:
- 第 4.2 步:用户浏览器从企业 SSO 登录界面跳转到 Baklib 授权回调界面
- 跳转链接:
https://help.company.com/-/xauth/sso_callback?code=aaa-bbb-ccc
- 参考文档:https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.2
- 跳转链接:
- 第 5 步:Baklib 从后台向 SSO 获取用户 Token
- 请求:
POST https://sso.company.com/oauth/access-token
- 请求头:
Content-Type: "application/x-www-form-urlencoded"
Authorization: Basic YXBwLWFiY2RlZmc6c2VjcmV0LXh4eHh4eA==
(对app-abcdefg:secret-xxxxxx
进行 base64 编码)
- 请求 Body:
grant_type=authorization_code&code=aaa-bbb-ccc&redirect_uri=https%3A%2F%2Fhelp.company.com%2F-%2Fxauth%2Fsso_callback
- 响应头:
content-type: "application/json; charset=utf-8"
- 返回结果:
{ "access_token":"2YotnFZFEjr1zCsicMWpAA", "token_type":"bearer", "expires_in":3600, "scope":"public" }
- 参考文档:
- https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.3
- https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.4
- 请求:
- 第 6.2 步:Baklib 通过 Token 从后台向企业 SSO 获取用户信息
- 请求:
GET https://sso.company.com/api/users/profile
- 请求头:
Authorization: Bearer 2YotnFZFEjr1zCsicMWpAA
- 返回结果:
{ "nickname":"小明", "image":"http://xxxx", "level":2 }
- 请求: