【荣耀帐号服务】手把手教你快速web接入

一、业务描述

荣耀帐号开放服务基于OAuth2.0,Web应用可以获取用户授权凭证, 实现授权登录功能, 可以实现浏览器Web授权登录接入或者手机H5授权登录接入荣耀帐号。

二、业务流程

1) 用户在应用网站上选择荣耀帐号登录

2) 应用服务器构造 /oauth2/v3/authorize 链接, 向荣耀帐号服务器发起授权请求

3) 荣耀帐号返回登录授权页到浏览器

4) 用户登录并授权

5) 荣耀帐号服务器返回302重定向响应, 请求应用服务器, 并在url中拼上code, 带给应用服务器

6) 应用服务器使用 Code 换 Access Token

7) 荣耀帐号服务器将 Access Token 返回给应用服务器

8) 应用服务器使用 Access Token 请求荣耀帐号服务器获取用户信息

9) 荣耀帐号服务器返回用户信息

10) 应用服务器返回登录成功展示登录信息

三、开发指导

1. 拉起荣耀帐号授权登录页

用户点击登录, 应用处理该点击事件, 构造 OAuth 授权 /oauth2/v3/authorize 请求链接, 该链接会重定向到登录页面.

html示例如下(点击打开):  

<html>
  <head>
    <title>HONOR ID Demo</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <style>
      .a {
        width: 300px;
        height: 30px;
        margin-top:2px;
      }
      #b {
        width: 420px;
        text-align: right;
      }
    </style>
  </head>

  <body>
    <div id="b">
      <form action="https://hnoauth-login.cloud.hihonor.com/oauth2/v3/authorize" method="get">
        <div>
          <label>client_id: </label>
          <input class="a" name="client_id" placeholder="appid" />
        </div>
        <div>
          <label>redirect_uri: </label>
          <input class="a" name="redirect_uri" placeholder="应用的回调地址" />
        </div>
        <div>
          <label>scope: </label>
          <input class="a" name="scope" value="openid profile" />
        </div>
        <div>
          <label>response_type: </label>
          <input class="a" name="response_type" value="code" />
        </div>
        <div>
          <label>access_type: </label>
          <input class="a" name="access_type" value="offline" />
        </div>
        <div>
          <label>state: </label>
          <input class="a" name="state" value="state-value" />
        </div>
        <p><button>HONOR ID LOGIN</button></p>
      </form>
    </div>
  </body>
</html>

打开该html网页之后显示如下:

填入client_id, redirect_uri, state 参数之后, 点击 "HONOR ID LOGIN" 按钮, 跳转如下链接, 即可拉起登录页面:

https://hnoauth-login.cloud.hihonor.com/oauth2/v3/authorize?
client_id=[appid]
&redirect_uri=[回调地址]
&scope=openid+profile
&response_type=code
&access_type=offline
&state=state-value

参数说明

参数名称是否必选参数说明
response_type授权码模式, 为固定值: code
client_id在 开发准备 中创建的服务器应用的AppId
redirect_uri用户登录授权之后, 会带上code参数302重定向该回调地址。回调地址必须和开发者服务平台设置的回调地址一致。回调地址可以添加多个。 回调地址后面可以添加参数, 如: https://www.demo.com/url?params=value
scope申请权限字符串数组,以空格分隔并做 urlEncode(URL编码后空格变为加号+),必须包含字符串“openid”。
access_type

枚举值,确定响应是否包含Refresh Token,Refresh Token用于刷新Access Token。

为offline时,返回响应包含Refresh Token。

为online或不传该值时,返回响应不包含Refresh Token。

state随机串,用于防CSRF,在返回授权码code时原封不动返回。 校验规则:^[0-9a-zA-Z:/.-_]+$
nonce防重放攻击,是一个随机值。在生成的id_token中原封不动保留nonce值。 校验规则:^[0-9a-zA-Z:/.-_]{1,1024}$
display填写 page 或 wap,默认为 page

2. 用户登录并授权

点击授权并登录之后, 会302重定向到地址 redirect_uri 并将 code和 state 参数拼接到 url 中

https://www.demo.com
?code=DQB6e3x9asNPjdN6%2Bw4%2FhzDJN%2Be3dnC3qKnLbUAhqqLQZMmak%2BWF%2F0mwEWlWTRUWyqxzUtvXn%2BBH1Twro7Tip3PiweRTldC9iFU%3D
&state=state-value

3. code 换取 Access Token

第2节会将code参数回调至应用服务, 应用服务拿到code参数之后, 调用 /oauth2/v3/token 接口用 code 换取 Access Token, Refresh Token, id Token等参数.

接口地址: https://hnoauth-login.cloud.hihonor.com/oauth2/v3/token

注意:

grant_type=authorization_code

接口调用文档参考: 服务端API接口 Code 换 Access Token

4. Access Token 获取用户信息

获取到Access Token之后, 可以通过 GOpen.User.getInfo 接口获取用户信息。

接口地址:https://account-drcn.platform.honorcloud.com/rest.php?nsp_fmt=JSON&nsp_svc=GOpen.User.getInfo

接口调用文档参考: 服务端API接口 Access Token 获取用户信息

5. Refresh Token 刷新 Access Token

Access Token 的有效期是1小时, 如果过期了, 还需要使用到的话, 那可以调用 /oauth2/v3/token 接口用 Refresh Token 换取Access Token.

接口地址:https://hnoauth-login.cloud.honor.com/oauth2/v3/token

注意: grant_type=refresh_token

接口调用文档参考: 服务端API接口 Refresh Token 刷新 Access Token

6.  解析Access Token

通过调用解析Access Token 接口可以将appid、open id、union_id、expire_in、scope等参数解析出来,该功能可用于用户鉴权。

接口地址:https://hnoauth-login.cloud.honor.com/rest.php?nsp_fmt=JSON&nsp_svc=honor.oauth2.user.getTokenInfo

接口调用文档参考: 服务端API接口 解析 Access Token

7.  解析Id Token (可选)

Id Token 是标准的jwt token, Id Token 可以解出appid, UnionId, displayname 和 头像等信息。该功能可以用于用户鉴权,简单用户信息获取。

解析id Token 有两种方式,一是调用服务端接口解析(仅供调试使用),二是本地解析(推荐)。

接口调用文档参考:服务端API接口 ID Token 本地校验(推荐)

8. 取消授权(可选)

用户授权之后,可以通过调用取消授权接口,消除用户授权的scope, 并且失效Access Token 和 Refresh Token。该接口会取消用户的授权关系,下次用户再使用该应用时会再次需要用户授权。

Refresh Token 失效之后,使用Refresh Token 换 Access Token 会返回 token revoked 错误:

{
    "sub_error": 31204,
    "error_description": "token revoked",
    "error": 1203
}

接口地址:https://hnoauth-login.cloud.honor.com/oauth2/v3/revoke

接口调用文档参考:服务端API接口 取消用户授权

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值