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

一、业务描述

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

二、业务流程

【荣耀帐号服务】手把手教你快速web接入_第1张图片

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示例如下(点击打开):  


  
    HONOR ID Demo
    
    
  

  
    

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

【荣耀帐号服务】手把手教你快速web接入_第2张图片

填入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.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接口 取消用户授权

你可能感兴趣的:(前端,服务器,java,web,android)