跳到主要内容

OAuth 2.0

1. 创建配置文件

创建 sso.json 默认路径为 /data/mingdao/script/volume/sso/sso.json,内容如下:

注意:如果挂载后依然出现 404 ,可将内容复制到 json.cn 中验证json格式是否合法

{
"mode": "common-oauth2",
"name": "oauth2",
"oauth2": {
"oauth2Url": "",
"clientId": "",
"clientSecret": "",
"idParamName": "client_id",
"secretParamName": "client_secret",
"accessTokenParamName": "access_token",
"redirectUri": "",
"authorizePath": "/authorize",
"tokenPath": "/access_token",
"userInfoUrl": "",
"params": {
"UserId": "uid",
"Name": "name",
"Email": "email",
"Mobile": "mobilePhone",
"Positions": "positions",
"Departments":"departments"
},
"autoRegister": true,
"projectId": ""
}
}

部分参数及解释

参数类型是否必须含义
oauth2.oauth2UrlStringoauth2身份服务地址; 如 http://192.168.10.80/oauth2
oauth2.clientIdString分发给应用的客户端Id
oauth2.clientSecretString分发给应用的客户端密钥
oauth2.idParamNameStringclient_id 映射的参数名, 根据 authorizePath、tokenPath 接口请求参数而定;一般设为 client_id
oauth2.secretParamNameStringclient_secret 映射的参数名, 根据 authorizePath、tokenPath 接口请求参数而定;一般设为 client_secret
oauth2.accessTokenParamNameStringaccess_token 映射的参数名, 根据 tokenPath 接口返回参数而定;默认为 accessToken
oauth2.redirectUriString回调地址;一般设为{server}/orgsso/oauth2; 如 http://192.168.10.20:8880/orgsso/oauth2
oauth2.authorizePathStringauthorize 访问路径,拼接为 oauth2Url/authorizePath;一般设置为/authorize
oauth2.tokenPathString获取访问令牌接口路径,拼接为 oauth2Url/tokenPath;一般设置为/access_token 返回参数要求
oauth2.userInfoUrlString获得用户信息接口完整地址; 如:http://{host}/getUserInfo,最终请求 url 会自动携带 token 参数;例:http://192.168.10.80/getUserInfo?{tokenKeyParamName}={access_token} 返回参数要求
oauth2.tokenKeyParamNameString获取用户信息传递 access_token 的参数名,默认为 token
oauth2.authorizationMethodString参数(client_id/client_secret)传值方式; 可选参数为[header,body];默认 header
oauth2.bodyFormatString参数请求格式 content-type为application/json或application/x-www-form-urlencoded; 可选参数为[form,json]; 默认 form
oauth2.paramsObject返回用户信息字段映射规则,key为固定字段value根据实际用户信息配置;参数配置方法
oauth2.params.UserIdString用户唯一标识
oauth2.params.NameString用户名,如用户已存在会自动覆盖
oauth2.params.EmailString邮箱;通过邮箱查找或者注册此字段必须设置; 邮箱或者手机号必须设置其中一个;如已经绑定第三方关系的,可通过关系查找用户,邮箱或手机可不设置
oauth2.params.MobileString手机号;通过手机号查找或者注册此字段必须设置;
oauth2.params.PositionsArray职位;自动更新用户的职位,不存在自动创建
oauth2.params.DepartmentsArray部门;自动更新用户的部门,不存在自动创建
autoRegisterBoolean当账号不存在时,是否自动创建账号;默认为 true
projectIdStringHAP 组织编号;组织管理(右上角) > 组织信息(页)>组织编号ID;(多组织单点登录不需要配置此参数,如何配置见步骤3);如 1x-2x-3x-4x-5x

如需通过第三方关系查找用户(用户是接口同步方式创建),

需要创建文件 extend.json

默认路径 /data/mingdao/script/volume/sso/extend.json,内容如下

{
"relation": true
}

交互示意图

ticket

获取访问令牌的接口需要满足以下要求

  • 支持 POST 方式调用,如下图:

  • 返回值为 JSON 格式,且需满足如下格式:
{     
"access_token": "wQ7kZ5iJ1lK9iU0mJ2oH4rN0uW8gI1vV4fR1jC7yG8yX4gP2qK6mH1iS7iX4zQ1w",
"expires_in": 7200 // 单位秒
}

获取用户信息的接口需要满足以下要求

  • 支持 GET 方式调用(参考 userInfoUrl 参数说明)

  • 返回值为 JSON 格式,且需满足如下格式:

{    
"data": {
"uid": "用户id",
"name": "姓名",
"email": "邮箱",
"mobilePhone": "手机号",
"positions":["职位1","职位2"],
"departments":["部门1","部门2"]
}
}

根据以上👆返回,则params 的配置为:

"params": {
"UserId": "uid",
"Name": "name",
"Email": "email",
"Mobile": "mobilePhone",
"Positions": "positions",
"Departments":"departments"
}

2. 挂载配置文件

修改微服务应用对应的 docker-compose.yaml, 默认路径 /data/mingdao/script/docker-compose.yaml, 在 volumes 中增加文件挂载并重启微服务应用。

- ./volume/sso/sso.json:/usr/local/MDPrivateDeployment/sso/OptionFile/sso.json

如创建了extend.json需增加挂载

- ./volume/sso/extend.json:/usr/local/MDPrivateDeployment/sso/extend.json
提示

挂载配置完成需重启微服务应用

重启成功后可通过GET方式访问 {server}/orgsso/checkssoconfig 接口,查看配置文件是否挂载成功

3. 单点登录

单组织

浏览器访问: {server}/orgsso/sso?returnUrl={returnUrl}

多组织

浏览器访问: {server}/orgsso/sso?returnUrl={returnUrl}&appKey={appKey}&sign={sign}&timestamp={timestamp}&projectId={projectId}

对于多组织 projectId 需要通过参数传递,还需要企业授权认证参数;

企业认证授权签名算法请参考:https://www.showdoc.com.cn/mingdao/15539798

备注

{server} 为 HAP 系统地址,比如可替换为:http://192.168.10.20:8880

{returnUrl} 为登录成功后的跳转地址,可不填写;比如需要跳转应用页面,则可替换为:http://192.168.10.20:8880/app/cf595091-e3ac-4669-a320-068e55533c33/64477b37df36209b5f36f1cf/64477b4f61655012a90ed994?from=insite

如果访问过程中出现的 SSO Error 提示,则可以通过管理员账号登录 HAP 系统,点击右上角头像: 系统配置>日志 ; 搜索服务名sso,排查具体报错原因