对接企业自有SSO单点登录

2022-03-18 265

第一步、开启功能

进入租户端界面点击“插件”按钮,选择“站点权限”功能
找到企业自有sso登录授权功能列表

第二步、进入企业自有SSO配置界面

在企业自有的SSO后台开通一个第三方登录账号,填入第二步配置界面中的重定向地址(Redirect URL),获得以下信息:
  1. 应用ID(App ID)
  2. 应用密钥(App Secret)
  3. 适用范围(Scopes)

第三步、进入 Baklib “站点权限”配置页面

进入企业自有SSO登录授权配置板块,填写配置信息:
  1. 应用ID(App ID):从第二步获得
  2. 应用密钥(App Secret):从第二步获得
  3. 适用范围(Scopes):从第二步获得
  4. 授权URL(Authorization URL),该地址可以了解企业自有 SSO 服务的相关文档
  5. 访问令牌URL(Access Token URL),该地址可以了解企业自有 SSO 服务的相关文档
  6. 用户信息URL(User Info URL) ,该地址可以了解企业自有 SSO 服务的相关文档
完善用户信息的字段映射:
  1. 昵称字段:对应 User Info URL 返回的昵称字段,如:name
  2. 头像字段:对应 User Info URL 返回的头像字段,如:headshot
  3. 访问权限字段:对应 User Info URL 返回的访问权限字段,如:level,返回的值必须是0~10的整数,通常需要SSO特殊定制,如果不填此字段,用户的默认权限为1级
个性配置:
  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
      }
      
1