应用信息包含appId和masterSecret。
应用开发者需要向推送服务公司个推申请注册应用。
您可根据应用信息生成鉴权令牌,调用支持此类鉴权的Open Harmony公开API
服务账号令牌为JWT(JSON Web Token)格式字符串,JWT数据格式包括三个部分:
这三个部分通过“.”进行连接。
示例
eyJ0eX******IUzI1NiJ9.eyJpc******YzNTZ9.j6y1NGM******NncAeLE
更多JWT的相关知识请参见:【Introduction to JSON Web Tokens】https://jwt.io/introduction/
申请注册应用。
您申请注册应用成功后,可以获得appId和masterSecret。
形式可参考(文件内容已经经过脱敏处理):
[AppId]
NdMch6e******mcsXsxM4A
[MasterSecret]
fIRUWrz******rKx0M1rs8
生成JWT Header数据。
对以下JSON体进行BASE64编码。
示例:
{
"alg": "HS256",
"typ": "JWT"
}
字段说明:
| 字段名 | 描述 |
|---|---|
| alg | 算法类型,固定为:HS256。 |
| typ | 数据类型,固定为:JWT。 |
生成JWT Payload数据。
根据应用信息中的appId(对应示例中的iss)字段拼接以下JSON体,对JSON体进行BASE64编码。
示例:
{
"iss": "{appId}",
"iat": 1768458422,
"exp": 1768462022
}
字段说明:
| 字段名 | 描述 |
|---|---|
| iss | 应用信息中的appId,标识数据生成者。 |
| iat | JWT签发UTC时间戳,为自UTC时间1970年1月1日00:00:00起的秒数(您的服务器时间需要校准为标准时间)。 |
| exp | JWT到期UTC时间戳,比iat晚3600秒。 |
生成JWT Signature数据。
将完成BASE64编码后的Header字符串与Payload字符串,通过“.”进行连接,您可在业务应用中,根据应用信息中的masterSecret进行sha256编码后作为生成签名的Key,使用HS256算法对拼接的字符串签名进行签名。
拼接最终的JWT
按照 Header.Payload.Signature 的格式拼成最终 JWT。
至此,您已经完成应用信息鉴权令牌JWT Token的生成。
您的应用调用推送服务REST API时,需要把已获得的应用信息鉴权令牌放在Authorization头部来进行鉴权。
示例
POST "https://oh-push-api.getui.com/v3/NdMch6e******mcsXsxM4A/messages:send"
Authorization: Bearer eyJ0eX******IUzI1NiJ9.eyJpc******YzNTZ9.j6y1NGM******NncAeLE
push-type: 0
说明
Authorization格式:Bearer后面拼接空格,再拼接获取的鉴权信息。
为了方便您生成鉴权令牌,我们提供了Java语言的示例代码,请按照说明替换参数运行。
如果您使用其他开发语言,请选择对应的JWT开源组件(https://jwt.io/libraries)进行开发。
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.5</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.5</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.11.5</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.8</version>
</dependency>
import io.jsonwebtoken.JwsHeader;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import org.apache.commons.codec.digest.DigestUtils;
import javax.crypto.SecretKey;
import java.util.Date;
/**
* 以下示例基于Java 8
*/
public class JwtGenerator {
/**
* Token 有效期:1 小时
*/
private static final long EXPIRE_SECONDS = 3600;
/**
* 生成 JWT Token
*
* @param appid 提供给开发者的 appId
* @param masterSecret 提供给开发者的 masterSecret
* @return JWT Token 字符串
*/
public static String generateToken(String appid, String masterSecret) {
long nowMillis = System.currentTimeMillis();
Date issuedAt = new Date(nowMillis);
Date expiration = new Date(nowMillis + EXPIRE_SECONDS * 1000);
SecretKey key = Keys.hmacShaKeyFor(DigestUtils.sha256(masterSecret));
return Jwts.builder()
.setHeaderParam(JwsHeader.TYPE, JwsHeader.JWT_TYPE)
.setIssuer(appid)
.setIssuedAt(issuedAt)
.setExpiration(expiration)
.signWith(key, SignatureAlgorithm.HS256)
.compact();
}
}