写点什么

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

  • 2022 年 9 月 22 日
    北京
  • 本文字数:2339 字

    阅读完需:约 8 分钟

一、业务描述

荣耀帐号开放服务基于 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
复制代码

参数说明



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.hihonorcloud.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.hihonor.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.hihonor.com/rest.php?nsp_fmt=JSON&nsp_svc=hihonor.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.hihonor.com/oauth2/v3/revoke

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

用户头像

还未添加个人签名 2022.06.28 加入

第一时间发布荣耀开发者服务平台相关资讯,共享行业资源,合作共赢。荣耀开发者服务平台是荣耀面向开发者的统一生态入口,支持一站式接入荣耀软件、硬件生态合作,助力开发者商业成功。

评论

发布
暂无评论
【荣耀帐号服务】手把手教你快速web接入_前端_荣耀开发者服务平台_InfoQ写作社区