Welink应用管理平台免登接入步骤
概述
当管理员需要对某个应用进行配置管理的时候,管理员可以选择该应用,无需再次输入账号密码,直接进入到这个应用的管理后台。目前我们的用户身份验证与授权系统采用的是被业界各大开放平台所采纳的OAuth2.0标准协议,想了解更多 OAuth2.0 的技术说明可参看官方网站。
OAuth2.0接入步骤
一、应用注册(获取client_id和client_secret)
所有要接入WeLink后台的We码小程序(或者H5轻应用)都要在开发者后台配置应用管理后台地址。
二、拼接免登地址
当用户点击已配置的管理后台地址时,应用后台检测到当前请求无session时,将用户请求定向到https://login.welink.huaweicloud.cn/sso/oauth2/authorize
地址上,并带上以下参数:
client_id:必须参数,注册We码小程序时获得的应用id。
response_type:必须参数,此值固定为“code”。
redirect_uri:必须参数,授权后要回调的URI,即接收Authorization Code的URI。redirect_uri中不可带有query参数。
scope:必须参数,此值固定为“backendlogin”,代表请求用户的默认权限。
state:非必须参数,用于保持请求和回调的状态,授权服务器在回调时(重定向用户浏览器到“redirect_uri”时),会在Query Parameter中原样回传该参数。OAuth2.0标准协议建议,利用state参数来防止CSRF攻击。
例如:“client_id”为20190522170721569的应用要请求某个用户的默认权限,并在授权后需跳转到http://www.example.com/callbackcode
,则应用需要重定向用户的请求到如下URL:
如果调试过程中出现404,请确认redirect_uri务必urlencode
WeLink不会为应用拼接免登地址,需要应用自行拼接
https://login.welink.huaweicloud.cn/sso/oauth2/authorize?client_id=20190522170721569&response_type=code&redirect_uri=http%3A%2F%2Fwww.example.com%2Fcallbackcode&scope=backendlogin&state=69ec334f76e14f0fa6531056c8461b26
三、 处理WeLink重定向
当用户跟随上述的重定向地址跳转到WeLink授权服务后,授权服务在判断用户已登录后,会将用户浏览器重定向到上面重定向地址指定的 “redirect_uri”,并附带上授权服务生成的code参数,以及state参数(如果请求authorization code时带了这个参数)。 例如:假设授权服务在用户同意授权后生成的Authorization Code为“ANXxSNjwQDugOnqeikRMu2bKaXCdlLxn”,则授权服务将会返回如下响应并重定向用户浏览器到 http://www.example.com/callbackcode 地址上。
HTTP/1.1 302 Found Location:http://www.example.com/callbackCode?code=ANXxSNjwQDugOnqeikRMu2bKaXCdlLxn&state=24abb465ea9a4d9fbc796ef8f40f428b
code
参数可以在“redirect_uri”对应的应用后端程序中获取。
每一个Authorization Code的有效期为5分钟, 且仅能使用一次。
四、通过Authorization Code获取Access Token
通过上一步获得Authorization Code后,便可以用其换取一个Access Token。 获取方式是:应用在其服务端程序中发送请求(必须使用POST方式)到WeLink OAuth2.0授权服务的 https://open.welink.huaweicloud.cn/api/oauth2/v1/token 地址上,并带上以下5个必须参数:
grant_type:必须参数,此值固定为“authorization_code”。
code:必须参数,通过上一步所获得的Authorization Code。
client_id:必须参数,应用ID。
client_secret:必须参数,应用的Secret。
redirect_uri:必须参数,该值必须与获取Authorization Code时传递的“redirect_uri”的域名保持一致。
state:非必须参数,用于保持请求和回调的状态,授权服务器在回调时(重定向用户浏览器到“redirect_uri”时),会在Query Parameter中原样回传该参数。OAuth2.0标准协议建议,利用state参数来防止CSRF攻击。
POST /oauth2/v1/token HTTP/1.1 Host:open.welink.huaweicloud.cn Content-Type:application/x-www-form-urlencoded https://open.welink.huaweicloud.cn/api/oauth2/v1/token?grant_type=authorization_code&code=ANXxSNjwQDugOnqeikRMu2bKaXCdlLxn&client_id=20190522170721568&client_secret=2dc28f5a-0db3-493b-9a5c-08fd9e5f69e4&redirect_uri=http%3A%2F%www.example.com%2Fcallbackcode&state=69ec334f76e14f0fa6531056c8461b26
响应数据包格式
若参数无误,服务器将返回一段JSON文本,包含以下参数:
HTTP/1.1 200 OK Content-Type: application/json Cache-Control: no-store { "code": "60001", "state": "123456", "message": "success", "token_type": "bearer", "expires_in": "28800", "access_token": "af99ea87-316a-58ac-a81a-fb581134fdcc" }
若请求错误,服务器将返回一段JSON文本,包含以下参数:
code:错误码;关于错误码的详细信息请参考错误码一节。
message:错误描述
HTTP/1.1 400 Bad Request Content-Type: application/json Cache-Control: no-store { "code": "60009", "message": "code Parameter error." }
五、通过Access Token判断当前用户是否有权限登录
通过上一步获得access_token后,便可以判断当前用户是否管理员,看其是否有权限登录应用后台。
请求格式说明
请求方式:GET (HTTPS)
认证方式: access_token,请参考第四步
请求地址:
https://open.welink.huaweicloud.cn/api/weopen/v1/isadmin
请求头部:
x-wlk-Authorization: ACCESS_TOKEN
响应格式说明
返回结果:
{ "code": "0", "message": "成功", "isAdmin": true, "roles": [ "appStoreAdmin" ] }
返回参数说明:
属性名 | 描述 |
---|---|
code | 响应结果状态码 |
message | 响应结果说明 |
isadmin | true/false,当为true是表示有权限管理该应用 |
roles | [“enterpriseAdmin”,“appStoreAdmin”, “appAdmin”] 返回值为列表中值的1个或者多个,enterpriseAdmin表示为租户管理员,appStoreAdmin表示为租户内所有应用的管理员 ,appAdmin表示为该应用的责任人 |
错误码说明:
错误码 | 错误说明 |
---|---|
0 | 成功 |
58001 | 登录信息中无APPID |
58002 | 获取登录用户信息失败 |
58003 | 当前用户不是管理员 |
六、通过Access Token 获取userId信息
通过上一步获得access_token后,便可以用其换取userId。 具体如下
请求格式说明
请求方式: GET (HTTPS)
请求地址: https://open.welink.huaweicloud.cn/api/auth/v1/userid
认证方式: access_token,请参考第四步。
请求头部:
x-wlk-Authorization: access_token
请求示例:
curl -H "x-wlk-Authorization: access_token" https://open.welink.huaweicloud.cn/api/auth/v1/userid
响应格式说明
返回结果:
{ "code":"0", "message":"ok", "userId": "zhangsan@welink", "tenantId": "AXSCC123ND2DESC..." //用户所在的租户id }
返回参数说明:
参数 | 说明 |
---|---|
code | 数据正常返回“0”,如果发生错误,会返回对应的错误码 |
message | 返回信息,包括接口请求发生错误时的详细信息 |
userId | 用户id |
tenantId | 租户id |
错误码说明:
错误码 | 说明 |
---|---|
41500 | 获取用户信息异常。 |
- 点赞
- 收藏
- 关注作者
评论(0)