OAuth2 标准集成方案
使用认证服务认证并登录,过程如下
- 访问认证服务,传入回调地址 redirect_uri,回调地址格式为:
https://域名/应用名/main/oauth/callback?location=要真正打开的地址
,例如:企业门户的地址为https://域名
- 认证服务器验证通过后,重定向到 redirect_uri,同时携带授权码 code
- 使用 code 调用认证服务的接口,获取授权 token
- 使用授权 token,调用认证服务的接口,获取用户信息
- 系统根据用户信息,在系统中自动注册用户,完成登录,并重定向到要真正打开的地址
系统提供 OAuth2 标准集成方案的代码
系统提供了 OAuth2 标准集成方案的代码:sso.zip。解压后,放到一个应用的 model/service 目录下。
main/java/main/controller/OauthController.java 中的 oauthcallback 方法是回调地址对应的 java 方法,这里需要传入两个参数:code 和 location。
实现 OAuth2 标准集成
只需重写 main/src/main/java/main/oauth/OauthProcessorImpl.java 中的这两个方法
- 一是 onRetriveAccessToken,根据 code 获取 accessToken
- 二是 onRetriveOauthUserInfo,根据 accessToken 获取用户信息
登录用户关联组织内用户
在获取用户信息后,系统调用注册影子账户 registerShadowUser 方法(在 main\java\main\service\UaaService.java 文件中),参数说明如下,其中带星号为必填参数。如果需要使用组织内用户,则 createRealUser=false,username=用户的 username
参数名 | 说明 |
---|---|
*openId | 会生成 uaa 中的 username,如果第三方系统唯一值为当前系统同步过去的 username,则需要做 md5,否则和正式用户的 username 相同违反唯一约束 |
*appId | 对接的第三方系统的 appId,例如微信登录的 appid、钉钉的 appid |
*type | 对接的第三方系统类型,比如 cp mp mina dingtalk |
username | 传递 username 代表不新建真实账户,直接关联 uaa 中存在的真实账户,此操作仅在第一次创建当前影子账户时有效,后续传递 username 不会切换绑定,如需切换绑定,参考解绑后重新绑定逻辑。 此操作有风险,仅支持内网调用,通过外网调用需要管理员权限 |
unionId | 相同 unionid 的影子账户会自动关联到同一个真实账户 |
avatar | 头像 URL,例如:http://wework.qpic.cn/bizmail/iawOJt0XsjdRn6nV7Z0/0 |
nickname | 第三方系统的中文名字 |
createRealUser | 是否创建真实用户,默认自动创建,设置为 false 不创建 |