域名说明
https://sec-sso.apps.paas.se-unicloud.com
准备工作
网站应用用户登录是基于OAuth2.0协议标准构建的OAuth2.0授权登录系统。
在进行OAuth2.0授权登录接入之前,您需要在平台上已创建了一个应用,详情查看开发前必读。
授权流程说明
OAuth2.0授权登录让用户使用星云智汇安全登录第三方应用或网站,在用户订阅应用且被审核通过后即认为授权。
用户登录星云智汇平台,通过星云智汇OAuth2.0的进入第三方应用后,第三方可以获取到用户的接口调用凭证(access_token),通过access_token可以实现获取用户基本信息。
适用于拥有server端的应用授权。该模式整体流程为:
- 第三方发起星云智汇授权登录请求,星云智汇判断用户已授权第三方应用后,星云智汇会重定向到第三方网站,并且带上授权临时票据code参数;
- 通过code参数加上AppID和AppSecret等,通过API换取用户access_token;
- 通过access_token进行接口调用,获取用户基本信息。
第一步:获取CODE
第三方使用网站应用授权登录前请注意已获取AppID和AppSecret,该链接需在浏览器中访问
{domain}/auth/realms/SE-UNICLOUD/protocol/openid-connect/auth?response_type=code&client_id={appid}&redirect_uri={redirect_uri}&state={state}&scope=userinfo
请求参数说明
参数 |
是否必须 |
说明 |
appid |
是 |
应用唯一标识 |
redirect_uri |
是 |
请使用urlEncode对链接进行处理 |
response_type |
是 |
填code |
state |
否 |
用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验 |
scope |
是 |
填userinfo |
返回说明
确认用户授权后,将会重定向到redirect_uri的网址上,并且带上code和state参数
第二步:获取用户信息(20221116更新)
https://open.apps.paas.se-unicloud.com/iot-open-manager/open/getLoginUserData
请求方式
请求以GET形式,认证采用bearer token。token 为应用的access_token。
注意:此接口不再用basic auth的方式。
应用的access_token获取请参考文档。
请求参数说明
参数 |
是否必须 |
说明 |
code |
是 |
填写第一步获取的code参数 |
redirectUri |
是 |
填写第一步的redirect_uri,不需要encode |
返回说明
{
"code": 1,
"message": "success",
"data": {
"sub": "f:809dc164-64d0-450c-b719-549f362ffe9a:xxxxx@youke",
"preferred_username": "admin@youke",
"openId": "xxxxx",
"nickName": "小强"
}
}
返回参数说明
参数 |
说明 |
preferred_username |
用户唯一登录账号 |
sub |
用户在SSO下的唯一ID |
nickName |
用户的昵称(有可能为空) |
openId |
用户的唯一ID |
第二步:获取用户access_token(已废弃)
该接口与废弃的获取用户信息接口进行了合并,已对接使用的应用可继续使用,不受影响,建议使用最新接口。
通过code获取用户access_token,code仅可使用一次,再次调用无效。
{domain}/auth/realms/SE-UNICLOUD/protocol/openid-connect/token
Authorization: 采用basic auth。
username和password分别为AppID和AppSecret
请求方式以及参数
请求方式为:POST请求,采用form形式提交
请求参数说明
参数 |
是否必须 |
说明 |
code |
是 |
填写第一步获取的code参数 |
grant_type |
是 |
填authorization_code |
redirect_uri |
是 |
填写第一步的redirect_uri |
针对刷新token的参数说明
参数 |
是否必须 |
说明 |
client_id |
是 |
你的appid |
grant_type |
是 |
填refresh_token |
refresh_token |
是 |
上次获取access_token时候的refresh_token |
返回说明
正确的返回:
{
"access_token":"ACCESS_TOKEN",
"expires_in":300,
"refresh_token":"REFRESH_TOKEN",
"refresh_expires_in": 1800
}
错误的返回:
{
"error": "invalid_token",
"error_description": "Token verification failed"
}
参数说明
参数 |
说明 |
access_token |
接口调用凭证 |
expires_in |
access_token接口调用凭证超时时间,单位(秒) |
refresh_token |
用户刷新access_token |
第三步:获取用户信息(已废弃)
该接口与废弃的获取用户access_token接口进行了合并,已对接使用的应用可继续使用,不受影响,建议使用最新接口。
{domain}/auth/realms/SE-UNICLOUD/protocol/openid-connect/userinfo
请求以POST形式,认证采用bearer token,无其他参数。(token 为第二步获取的用户access_token)
注意:此接口不再用basic auth的方式。
返回说明
{
"sub": "f:809dc164-64d0-450c-b719-549f362ffe9a:xxxxx@youke",
"preferred_username": "admin@youke",
"openId": "xxxxx",
"nickName": "小强"
}
参数说明
参数 |
说明 |
preferred_username |
用户唯一登录账号 |
sub |
用户在SSO下的唯一ID |
nickName |
用户的昵称(有可能为空) |
openId |
用户的唯一ID |
第三步:判断用户是否有访问应用的权限
https://open.apps.paas.se-unicloud.com/iot-open-manager/open/checkAuth?uniqueId=xxx
请求方式以及参数
请求方式为:GET请求
请求参数说明
参数 |
是否必须 |
说明 |
uniqueId |
是 |
用户唯一ID,用户信息中的openId |
返回示例
{
"code": 1,
"message": "success",
"data": {
"createUserId": null,
"updateUserId": null,
"id": 63,
"remark": null,
"deleted": false,
"version": 0,
"createDateTime": "2020-12-11T15:15:11",
"updateDateTime": "2020-12-11T15:15:11",
"createUserType": 1,
"updateUserType": 1,
"uniqueId": "tnhqqf3fnk",
"applicationUniqueId": "n89vnnsort",
"code": "TENANTADMIN",
"name": "租户管理员",
"tenantUniqueId": "testabc",
"isAuth":"true"
},
"error": ""
}
第四步:登出
应用系统点击退出后跳转重定向的路径为:
https://sec-portal.apps.paas.se-unicloud.com/#/logout?redirect_uri={redirect_uri}
参数 |
是否必须 |
说明 |
redirect_uri |
否 |
请使用urlEncode对链接进行处理 |
为便于平台做统一的退出操作,应用系统生成的token需遵守如下两点要求
1、token需要存在cookie中,cookie必须种在.se-unicloud.com 主域名下
2. token 的key命名规则,sedt-{AppID}-token;