华为开放平台鉴权

本文转载自华为开发者联盟


  1. 概述
      开放平台采用OAuth2.0协议作为第三方应用提供用户接入服务。OAuth2.0是一个开放授权协议,它可以使第三方应用在不获取用户的用户名和密码的前提下,访问用户授权的资源。OAuth2.0协议规范,可访问官方网站

  2. 流程
    1) 创建应用,获取client_id和client_secret。
    2) 客户端应用向华为OAuth2.0服务发起一个授权请求。
    3) 华为OAuth2.0服务向用户展示一个授权页面,提醒用户客户端应用需要获取用户的哪些信息。
    4) 用户授权客户端应用后,可获得一个access_token
    5) 通过access_token,客户端应用可以通过华为Open Api访问用户授权的数据。

  3. Access Token 获取方式

注意:目前access_token的有效期通过返回的expires_in来传达,access_token的有效时间可能会在未来有调整。access_token在有效期内尽量复用,业务要根据这个有效时间提前去申请新access_token即可。如果业务频繁申请access_token,可能会被流控。业务在API调用获知access_token已超时的情况下(NSP_STATUS=6,详细错误列表),可以触发access_token的申请流程。

Implicit Grant
又称User-Agent Flow,适用于所有无Server端配合的应用(桌面客户端需要内嵌浏览器),可以访问与用户相关的Open API
这里写图片描述

Client Credentials
即通过应用的密钥获取Access Token,适用于任何类型应用。
注意:通过此方式获取的access_token,仅可以访问与用户无关的Open API
这里写图片描述


3.1
Implicit Grant方式获取access_token
获取access_token
请求格式
可通过浏览器访问

https://login.vmall.com/oauth2/authorize

参数:
client_id:必选,申请应用时获得的应用 ID。
response_type:必选 ,此时必须为”token”
redirect_uri:必选,授权后要回调的URI,access token会附在URI上。
scope:可选,Access Token的访问范围,即用户实际授予的权限列表(用户在授权页面时,有可能会取消掉某些请求的权限)并只列出基础服务。
state:可选,授权服务器在回调时(重定向用户浏览器到“redirect_uri”时),会在uri中原样回传该参数。OAuth2.0标准协议建议,利用state参数来防止CSRF攻击。
display:可选,用户授权页面,目前支持page、dialog、tvDialog、mobile,系统默认显示display=page的页面。
举例:

https://login.vmall.com/oauth2/authorize?
  response_type=token&
  client_id=12345&
  redirect_uri=http%3A%2F%2Fwww.abc.com%2Fredirect%2Foauth2

响应格式
access_token:要获取的Access Token;
expires_in:Access Token的有效期,以秒为单位;
scope:Access Token的访问范围,即用户实际授予的权限列表(用户在授权页面时,有可能会取消掉某些请求的权限);
state:请求中的参数,原样返回

HTTP/1.1 302 Found
Location:
http://www.abc.com/redirect/oauth2#access_token=BFEsZqBuaW%5C%2F%5C%2F9GGn1mLt%2BKykzfBObIy6V3eN20ufoNiAERl33oVGzlN5TE5qeA%3D%3D&expires_in=86400

错误响应
error:错误码。
error_description:错误描述信息,用来帮助理解和解决发生的错误。
state:请求中的参数,原样返回

HTTP/1.1 302 Found
Location:
http://www.abc.com/redirect/oauth2#error=access_denied&error_description=user%20didnot%20allow%20your%20authorization%20request

3.2
Client Credentials方式获取access_token
获取access_token
请求格式

https://login.vmall.com/oauth2/token

参数:
grant_type:必选 ,此时必须为”client_credentials”
client_id:必选,申请应用时获得的应用 ID。
client_secret:必选,申请应用时获得的应用密钥。
scope:可选,以空格分隔的权限列表,若不传递此参数,默认权限包括(nsp.auth nsp.user nsp.vfs nsp.ping openpush.message)

POST /oauth2/token HTTP/1.1
  Host: login.vmall.com
  Content-Type: application/x-www-form-urlencoded
  grant_type=client_credentials&client_id=12345&client_secret=bKaZ0VE3EYrXaXCdCe3d2k9few

响应格式
access_token:要获取的Access Token;
expires_in:Access Token的有效期,以秒为单位;
scope:Access Token的访问范围,即用户实际授予的权限列表(用户在授权页面时,有可能会取消掉某些请求的权限);
举例:

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
{
  "access_token": "BFEsZqBuaW\/\/9GGn1mLt+KykzfBObIy6V3eN20ufoNiAERl33oVGzlN5TE5qeA==",
  "expires_in": 86400,
}

错误响应
error:错误码。
error_description:错误描述信息,用来帮助理解和解决发生的错误。

HTTP/1.1 400 Bad Request
Content-Type: application/json
Cache-Control: no-store
{
  "error": "invalid_code",
  "error_description": "The code is invalid"
}

你可能感兴趣的:(华为开放平台鉴权)