一、配置ClientID
-
登录AGC,我的项目(选择目标应用)>项目设置>常规>应用,获取ClientID和ClientSecret
-
module.json5中module字段下增加metadata配置项:
{
"module":{
...
"metadata":[
{
"name":"client_id",
"value":"xxxxx(刚刚获取的ClientID)"
}
]
}
}
二、申请scope权限
- 登录华为开发者联盟,管理中心>API服务>授权管理
- 根据项目名称查询并基于项目ID选择应用所属的项目
- 根据应用名称和应用ClientID选择凭证名称
- 选择“华为账号服务>敏感权限>华为账号一键登录”,点击“申请”
- 点击申请后选择对应的“服务类型”选项,根据应用实际情况填写使用场景
- 提交申请后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页面
4. 选中Kit Assitant页面中的QuckLoginButton,拖拽到刚刚创建的容器中,即可在容器中增加一键登录控件并增加对应的代码片段
四、服务器开发
1. 客户端通过一键登录获取Authorization Code后发送给服务器
2. 服务端使用ClientID、ClientSecret、Authorization Code调用获取用户级凭证的接口请求获取Access Token、Refresh Token
- 接口地址:oauth-login.cloud.huawei.com/oauth2/v3/t…
- 请求方法:POST
- 请求体:
参数 | 类型 | 描述 |
---|---|---|
grant_type | string | (必选)授权模式,固定传“authorization_code” |
client_id | string | (必选)之前在AGC查看的应用的唯一标识 |
client_secret | string | (必选)之前在AGC查看的应用公钥 |
code | string | (必选)客户端传过来的Authorization Code |
- 响应体:
参数 | 参数类型 | 描述 |
---|---|---|
token_type | string | (必选)固定字符串“Bearer” |
access_token | string | (必选)权限凭证 |
scope | string | Access Token中的scope |
expires_in | string | Access Token的过期时间(单位:秒),有效期60分钟 |
refresh_token | string | 用于刷新Access Token,有效期为180天。 |
id_token | String | 获取code时,包含openid权限,则会返回此参数(JWT格式) |
3. 服务端使用Access Token调用获取用户信息的接口获取用户绑定手机号和UnionID、OPenID
- 接口地址:account.cloud.huawei.com/rest.php?ns…
- 请求方法:POST
- 请求体:
参数 | 类型 | 描述 |
---|---|---|
access_token | string | (必选)权限凭证 |
- 响应体:
参数 | 参数类型 | 描述 |
---|---|---|
openID | string | 用户OpenID |
unionID | string | 用户UnionID |
loginMobileNumber | string | 华为账号绑定号码 |
loginMobileValid | string | 华为账号绑定号码的实时有效性 |
purePhoneNumber | string | 不带国家码的手机号(loginMobileNumber去除phoneCountryCode) |
phoneCountryCode | String | 国际冠码(00)+国际电话区号 |
4. 服务端根据获得的用户信息,进行用户登录或注册关联账号等操作(结合实际业务)
(略)
5. Access Token过期后需要调用刷新凭证的接口向华为账号服务器请求获取新的Access Token
- 接口地址:oauth-login.cloud.huawei.com/oauth2/v3/t…
- 请求方法:POST
- 请求体:
参数 | 类型 | 描述 |
---|---|---|
grant_type | string | (必选)授权模式,固定传“refresh_token” |
client_id | string | (必选)之前在AGC查看的应用的唯一标识 |
client_secret | string | (必选)之前在AGC查看的应用公钥 |
refresh_token | string | (必选)刷新凭证 |
scope | string | Access Token的作用域,不传则和refresh_token作用域相同 |
- 响应体:
参数 | 类型 | 描述 |
---|---|---|
token_type | string | (必选)固定字符串“Bearer” |
access_token | string | (必选)权限凭证 |
scope | string | Access Token中的scope |
expires_in | string | Access Token的过期时间(单位:秒),有效期60分钟 |
refresh_token | string | 用于刷新Access Token,有效期为180天。 |
id_token | String | 获取code时,包含openid权限,则会返回此参数(JWT格式) |
6. Refresh Token失效后需要通知客户端重新调用授权接口请求用户授权
(略)