鸿蒙开发(十六)华为开放能力——华为账号一键登录

162 阅读4分钟

一、配置ClientID

  1. 登录AGC,我的项目(选择目标应用)>项目设置>常规>应用,获取ClientID和ClientSecret

  2. module.json5中module字段下增加metadata配置项:

    {
        "module":{
            ...
            "metadata":[
            {
                "name":"client_id",
                "value":"xxxxx(刚刚获取的ClientID)"
            }
            ]
        }
    }

二、申请scope权限

  1. 登录华为开发者联盟,管理中心>API服务>授权管理
  2. 根据项目名称查询并基于项目ID选择应用所属的项目
  3. 根据应用名称和应用ClientID选择凭证名称
  4. 选择“华为账号服务>敏感权限>华为账号一键登录”,点击“申请”
  5. 点击申请后选择对应的“服务类型”选项,根据应用实际情况填写使用场景

image.png

  1. 提交申请后5个工作日内会出结果,申请成功后24小时左右生效

三、客户端开发

1. 知识点:UnionID和OpenID的区别

同一个华为账号,在同一个开发者的不同应用中UnionID是相同的,用于在同一个开发者账号下标识用户的唯一性;

同一个华为账号,在同一个开发者的不同应用中OpenID是不同的,用于在同一个应用下标识用户的唯一性。

2. 创建或打开需要提供一键登录功能的页面,在页面的build()方法中创建一个根容器(如Column)
@Entry
@Component
struct QuickLoginPage {
  @State message: string = 'Hello World';

  build() {
    Column() {
      
    }
    .height('100%')
    .width('100%')
  }
}
3. 使用快捷键Alt + K,打开Kit Assistant页面

image.png

4. 选中Kit Assitant页面中的QuckLoginButton,拖拽到刚刚创建的容器中,即可在容器中增加一键登录控件并增加对应的代码片段

image.png

image.png

四、服务器开发

1. 客户端通过一键登录获取Authorization Code后发送给服务器
2. 服务端使用ClientID、ClientSecret、Authorization Code调用获取用户级凭证的接口请求获取Access Token、Refresh Token
参数类型描述
grant_typestring(必选)授权模式,固定传“authorization_code”
client_idstring(必选)之前在AGC查看的应用的唯一标识
client_secretstring(必选)之前在AGC查看的应用公钥
codestring(必选)客户端传过来的Authorization Code
  • 响应体:
参数参数类型描述
token_typestring(必选)固定字符串“Bearer”
access_tokenstring(必选)权限凭证
scopestringAccess Token中的scope
expires_instringAccess Token的过期时间(单位:秒),有效期60分钟
refresh_tokenstring用于刷新Access Token,有效期为180天。
id_tokenString获取code时,包含openid权限,则会返回此参数(JWT格式)
3. 服务端使用Access Token调用获取用户信息的接口获取用户绑定手机号和UnionID、OPenID
参数类型描述
access_tokenstring(必选)权限凭证
  • 响应体:
参数参数类型描述
openIDstring用户OpenID
unionIDstring用户UnionID
loginMobileNumberstring华为账号绑定号码
loginMobileValidstring华为账号绑定号码的实时有效性
purePhoneNumberstring不带国家码的手机号(loginMobileNumber去除phoneCountryCode)
phoneCountryCodeString国际冠码(00)+国际电话区号
4. 服务端根据获得的用户信息,进行用户登录或注册关联账号等操作(结合实际业务)

(略)

5. Access Token过期后需要调用刷新凭证的接口向华为账号服务器请求获取新的Access Token
参数类型描述
grant_typestring(必选)授权模式,固定传“refresh_token”
client_idstring(必选)之前在AGC查看的应用的唯一标识
client_secretstring(必选)之前在AGC查看的应用公钥
refresh_tokenstring(必选)刷新凭证
scopestringAccess Token的作用域,不传则和refresh_token作用域相同
  • 响应体:
参数类型描述
token_typestring(必选)固定字符串“Bearer”
access_tokenstring(必选)权限凭证
scopestringAccess Token中的scope
expires_instringAccess Token的过期时间(单位:秒),有效期60分钟
refresh_tokenstring用于刷新Access Token,有效期为180天。
id_tokenString获取code时,包含openid权限,则会返回此参数(JWT格式)
6. Refresh Token失效后需要通知客户端重新调用授权接口请求用户授权

(略)