
2.3.3 Service Account使用
(1)Service Account获取
Service Account是用于开发者服务器与HMS Core开放能力服务器间对接的凭证,开发者可直接在华为开发者联盟的API Console上创建生成Service Account,并根据下载的JSON文件生成服务账号凭证。Service Account获取界面如图2-15所示。
服务账号凭证是一个JWT(JSON Web Token)格式字符串,JWT数据格式包括3个部分:Header(头部)、Payload(负载)和Signature(签名)。这3个部分通过“.”进行连接,其中Signature为通过SHA256withRSA算法对Header与Payload拼接的字符串进行签名而生成的字符串。更多JWT的相关知识请参考https://jwt.io/introduction/。
我们先介绍如何生成JWT头部数据,从表2-1可以了解头部数据的格式。
图2-15 Service Account获取
表2-1 JWT头部数据格式
头部的JSON示例为:
{ "kid":"c60c27b8f2f34e9bac2b07c852f1800e", "typ":"JWT", "alg":"RS256" }
进行Base64编码后的头部如下所示:
eyJraWQiOiJjNjBjMjdiOGYyZjM0ZTliYWMyYjA3Yzg1MmYxODAwZSIsInR5cCI6IkpXVCIsImFsZy I6IlJTMjU2In0
再来看看如何生成JWT负载数据。负载组中的字段如表2-2所示。
表2-2 JWT负载组字段
负载的JSON示例:
{ "aud": "https://oauth-login.cloud.huawei.com/oauth2/v3/token", "iss": "300125961", "exp": 1581410664, "iat": 1581407064 }
进行Base64编码后的负载如下所示:
eyJhdWQiOiJodHRwczovL29hdXRoLWxvZ2luLmNsb3VkLmh1YXdlaS5jb20vb2F1dGgyL3YzL3Rva2 VuIiwiaXNzIjoiMzAwMTI1OTYxIiwiZXhwIjoxNTgxNDEwNjY0LCJpYXQiOjE1ODE0MDcwNjR9
最后了解如何生成JWT签名数据。将完成Base64编码后的Header字符串与Payload字符串通过“.”进行连接。开发者可在业务应用中让JSON文件中的private_key[1]使用SHA256withRSA算法对拼接的字符串签名,具体如下所示。
JWT签名数据=SHA256withRSA (base64UrlEncode(header) + "." +base64UrlEncode(payload), private_key);
(2)使用示例
将生成的JWT放在HTTP请求头部的Authorization中,格式如下:
Authorization: Bearer JWT
注意,Bearer与JWT之间需要有一个空格。
消息示例如下:
GET /v1/demo/indexes HTTP/1.1 Authorization:Bearer eyJraWQiOiIx---xxx.eyJhdWQiOiJodHR---xxx.QRodgXa2xeXSt4Gp ---xxx Host: oauth-api.cloud.huawei.com
(3)典型交互流程
开发者App通过Service Account来访问应用的接口,如图2-16所示。
具体交互流程如下。
①开发者构造JWT;
图2-16 Service Account交互流程
②开发者App携带JWT访问华为OAuth服务器;
③华为OAuth服务器验证JWT的有效性;
④华为OAuth服务器返回Access Token;
⑤开发者App携带Access Token访问相关的资源。
⑥华为业务服务器的接口返回需要的数据。
[1] 华为不进行存储,请开发者妥善保管。