管理后台免登接入步骤


一、配置应用管理后台管理后台地址

获取client_id和client_secret

进入开发者后台,打开具体的应用,在应用的“基本信息”中获取相应的client_id和client_secret。

配置管理后台地址

所有要接入WeLink后台的We码/轻应用,在“版本管理”页签下的开发版中配置应用管理后台地址。

配置管理后台地址

注意,此处配置的地址为应用管理后台处理免登的地址,并非WeLink的登陆跳转地址。

二、拼接免登地址

当用户点击已配置的管理后台地址时,应用后台检测到当前请求无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 响应结果说明
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.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 获取用户信息异常。

结果。 ""

    无结果。 ""