目前爱速搭私有版本支持两种方式来对接自己的登录系统。要启用自定义登录方式,需要修改 ISUDA_AUTH_ENABLED_LIST 环境变量。

比如:

  1. ISUDA_AUTH_ENABLED_LIST=email,oauth

表示同时开启邮箱登录和 oauth 登录,具体登录相关配置请接着往下看。

oauth 2.0 登录

首先请确保 ISUDA_AUTH_ENABLED_LIST 中包含了 oauth。

然后配置

  • ISUDA_OAUTH_AUTHORIZE_URL 为 oauth 授权地址,通常是 sso 登录地址如:http://xxx.com/login
  • ISUDA_OAUTH_TOKEN_URL 为 oauth 获取 token 的 api 地址。
  • ISUDA_OAUTH_CLIENT_ID 为 oauth clientId
  • ISUDA_OAUTH_CLIENT_SECRET 为 oauth clientSecret
  • ISUDA_OAUTH_SCOPE 默认值为 email
  • ISUDA_OAUTH_INFO_URL 获取用户资料的接口地址。

在申请 oauth 账号的时候如果需要配置回调地址,请填写 http://{{你的域名}}/auth/oauth/callback

如果退出的时候想同时退出 sso 服务,可以配置:

接入流程

假设你的爱速搭部署在 http://aisuda-server.com 下,然后爱速搭环境变量配置如下:

  1. ISUDA_OAUTH_AUTHORIZE_URL=http://oauth-server.com/oauth
  2. ISUDA_OAUTH_TOKEN_URL=http://oauth-server.com/access_token
  3. ISUDA_OAUTH_CLIENT_ID=dummy_client_id
  4. ISUDA_OAUTH_CLIENT_SECRET=dummy_client_secret
  5. ISUDA_OAUTH_SCOPE=email
  6. ISUDA_OAUTH_INFO_URL=http://oauth-server.com/auth/userinfo

1.首先打开爱速搭登录页面,点击登录框底部的 OAuth 登录,跳转至 http://oauth-server.com/oauth 进行用户校验,地址栏参数大概如下:

  1. http://oauth-server.com/oauth?response_type=code&redirect_uri=http://aisuda-server.com/auth/oauth/callback&client_id=dummy_client_id

2.用户校验成功后,跳转 http://aisuda-server.com/auth/oauth/callback?code=abcd,code 参数就是 oauth 标准中的 authorization_code

3.然后会调用 ISUDA_OAUTH_TOKEN_URL 接口获取 access_token,请求格式如下:

  1. POST https://oauth-server.com/access_token
  2. grant_type=authorization_code
  3. &client_id=dummy_client_id
  4. &client_secret=dummy_client_secret
  5. &redirect_uri=http://aisuda-server.com/auth/oauth/callback
  6. &code=abcd

返回格式如下:

  1. {
  2. "token_type": "Bearer",
  3. "expires_in": 86400,
  4. "access_token": "l7AxzvRf1fxArtvOWSPGtN8XBiF4PSXuBFFDj_6IVOFFb3RCmdClqAt_Z6xUnX2M1p0nJDNm",
  5. "refresh_token": "lDh0jrOTgugCpGC6_TRchD-N",
  6. "scope": "email" // 可以不返回
  7. }

4.然后会调用 http://oauth-server.com/auth/userinfo 接口,获取用户信息进行登录,请求格式如下:

  1. GET http://oauth-server.com/auth/userinfo
  2. Header
  3. Authorization: Bearer l7AxzvRf1fxArtvOWSPGtN8XBiF4PSXuBFFDj_6IVOFFb3RCmdClqAt_Z6xUnX2M1p0nJDNm

接口通过 Authorization 获取到 access_token 校验用户,然后返回用户信息,用户信息如下:

  1. {
  2. "id": "oauth Id",
  3. "name": "用户名",
  4. "displayName": "用户展示名称",
  5. "email": "邮箱地址"
  6. }

如果返回的不是这个格式,可以通过以下配置来适配。

  • ISUDA_OAUTH_ID_FIELD 默认为 id 可以修改为如:user.id
  • ISUDA_OAUTH_NAME_FIELD 默认为 name 同样可以变量路径。
  • ISUDA_OAUTH_DISPLAY_FIELD 默认为 displayName 同样可以变量路径。
  • ISUDA_OAUTH_EMAIL_FIELD 默认为 email 同样可以变量路径。

如果不能返回 email 则会进入绑定邮箱环节,如果想跳过这个环节,可以配置

  • ISUDA_OAUTH_EMAIL_SUFFIX 为 xxx.com 这样,邮箱机会用 name 和 这个值拼接一个。

第三方登录

首先请确保 ISUDA_AUTH_ENABLED_LIST 中包含了 third。

第三方登录功能主要用于对接内部非 oauth 标准协议的登录系统,只需要实现两个接口就能完成对接。

主要有以下配置

  • ISUDA_THIRD_AUTH_AUTHORIZE_URL 为第三方登录地址如:http://xxx.com/login?service={{callback}}
  • ISUDA_THIRD_AUTH_PROFILE_URL 获取用户资料接口如:http://xxx.com/profile?code={{code}}
  • ISUDA_THIRD_AUTH_CODE_FIELD 默认为 code 可以配置成其他如 ticket
  • ISUDA_THIRD_AUTH_LOGOUT_URL 退出地址,如果希望爱速搭退出的时候把第三方登录也退出的话。

登录流程为:

  1. 开发一个登录页面,爱速搭在登录的时候会跳转到这个地址,同时将爱速搭回调地址填入 {{callback}},比如 http://xxx.com/login?service=http://aisuda.com/auth/third
  2. 在这个第三方登录页面里实现用户登录,完成登录后生成一个 code,这里可以是随机数也可以是用户信息的对称加密,后面的接口需要通过它获取真实用户信息。
  3. 从 url 里的 service 参数里从取出爱速搭回调地址,将前面的 code 填入,然后通过 302 跳转到爱速搭回调地址,比如 http://aisuda.com/auth/third?code=xxx
  4. 爱速搭平台会从 code 参数里取出这个值,然后去请求 http://xxx.com/profile?code=xxx 获取用户信息,这个接口需要返回如下内容:
  1. {
  2. "email": "xxx@xx.com",
  3. "username": "",
  4. "displayName": "",
  5. "avatar": "",
  6. "phone": ""
  7. }

如果返回 401 code_expired 则自动重新跳转登录