Welink应用管理平台免登接入步骤

举报
云会议运营喵大人 发表于 2020/01/19 11:28:12 2020/01/19
【摘要】 概述当管理员需要对某个应用进行配置管理的时候,管理员可以选择该应用,无需再次输入账号密码,直接进入到这个应用的管理后台。目前我们的用户身份验证与授权系统采用的是被业界各大开放平台所采纳的OAuth2.0标准协议,想了解更多 OAuth2.0 的技术说明可参看官方网站。OAuth2.0接入步骤一、应用注册(获取client_id和client_secret)所有要接入WeLink后台的We码小...

概述


当管理员需要对某个应用进行配置管理的时候,管理员可以选择该应用,无需再次输入账号密码,直接进入到这个应用的管理后台。目前我们的用户身份验证与授权系统采用的是被业界各大开放平台所采纳的OAuth2.0标准协议,想了解更多 OAuth2.0 的技术说明可参看官方网站

OAuth2.0接入步骤


一、应用注册(获取client_id和client_secret)

所有要接入WeLink后台的We码小程序(或者H5轻应用)都要在开发者后台配置应用管理后台地址。

1579404407398051.png

二、拼接免登地址

当用户点击已配置的管理后台地址时,应用后台检测到当前请求无session时,将用户请求定向到https://login.welink.huaweicloud.com/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.com/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.com/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.com
Content-Type:application/x-www-form-urlencoded

https://open.welink.huaweicloud.com/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.com/api/weopen/v1/isadmin

请求头部:

x-wlk-Authorization: ACCESS_TOKEN

响应格式说明

返回结果:

{  "code": "0",  
  "message": "成功",  "isAdmin": true,  "roles": [    "appStoreAdmin"
  ]
}

返回参数说明:

属性名描述
code响应结果状态码
message响应结果说明
isadmintrue/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.com/api/auth/v1/userid

认证方式: access_token,请参考第四步。

请求头部:

x-wlk-Authorization: access_token

请求示例:

curl  -H "x-wlk-Authorization: access_token" https://open.welink.huaweicloud.com/api/auth/v1/userid

响应格式说明

返回结果:

{
    "code":"0",
    "message":"ok",
    "userId": "zhangsan@welink",
    "tenantId": "AXSCC123ND2DESC..."   //用户所在的租户id
}

返回参数说明:

参数说明
code数据正常返回“0”,如果发生错误,会返回对应的错误码
message返回信息,包括接口请求发生错误时的详细信息
userId用户id
tenantId租户id

错误码说明:

错误码说明
41500获取用户信息异常。


【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。