OAuth2.0接入步骤


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

所有要接入WeLink后台 OAuth2.0的应用都必须先在WeLink开放平台中注册,并提供We码应用id以及回调地址给华为管理员(华为支持人员)。

二. 组装免登地址

将用户浏览器(或手机/桌面应用中的浏览器组件)定向到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

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重定向

如果用户点击了已组装好的免登地址,授权服务在判断用户已登录后,会将用户浏览器重定向到应用所指定的 “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:错误码;关于错误码的详细信息请参考“OAuth2.0错误响应”一节。
  • 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后,便可以判断当前用户是否管理员,看其是否有权限登录应用后台。具体参考:判断当前用户是否为管理员

六. 通过Access Token 获取userId信息

通过上一步获得access_token后,便可以用其换取userId。 具体参考:通过access_token获取userid

result. ""

    Not Found. ""