Thread 是專門為 loT 設備提供無線網狀網絡通信的協議,由三星、ARM、Nest 三家企業共同推出。為了加速 Thread 協議普及,多家公司于2014年7月組成 \"Thread
發表于 04-26 23:17
一、概述
通過訂閱用戶信息變更,您可以接收有關用戶及其賬戶的重要更新。當用戶取消元服務的授權信息、注銷華為賬號時,華為賬號服務器會發送通知到元服務,元服務可以根據通知消息進行自身業務處理。
二、用戶信息變更事件介紹
三、訂閱用戶信息變更
訂閱步驟如下:
1.登錄華為開發者聯盟,選擇“管理中心 > API服務 > API庫”。
2.在App Services找到RISC。
3.點擊啟用按鈕,選擇您的項目,點擊確定。
4.點擊訂閱通知按鈕,在彈窗中配置回調地址及訂閱范圍。
說明
回調地址:在開啟訂閱通知后,若華為用戶信息存在變更,會通過發送消息到該地址。
訂閱范圍:訂閱的用戶信息變更事件,詳見用戶信息變更事件介紹。
四、處理通知消息
華為賬號服務器向元服務投遞消息。元服務接收到消息后需要先對消息頭中的令牌進行驗簽,確保消息的完整有效性后解析并獲取用戶信息變更事件詳情。具體步驟如下:
1.驗證消息頭中的令牌簽名。
您可通過任何JWT庫(例如:jwt.io)對其進行解析與驗證。
無論使用哪種庫,您均需完成如下操作:
調用接口(https://risc.cloud.huawei.com/v1beta/public/risc/.well-known/risc-configuration),獲取發行者標識(issuer)與簽名密鑰證書URI(jwks_uri)。
通過依賴的JWT庫,對消息頭中的令牌進行解析,獲取簽名的KeyId。
通過簽名的KeyId,從簽名密鑰證書URI中獲取到JWT簽名的公鑰。
校驗JWT簽名中的aud與訂閱用戶信息變更中提供的Client ID一致。
校驗JWT簽名中的issuer與發行者標識(issuer)一致。
具體驗簽邏輯,請參考如下示例代碼:
Maven依賴配置
<dependencies>
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>2.9.3</version> <!--此處替換為您項目需要的版本-->
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>jwks-rsa</artifactId>
<version>0.21.2</version> <!--此處替換為您項目需要的版本-->
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.5</version> <!--此處替換為您項目需要的版本-->
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.11.5</version> <!--此處替換為您項目需要的版本-->
</dependency>
</dependencies>
Java驗簽代碼示例
import com.auth0.jwk.JwkProvider;
import com.auth0.jwk.UrlJwkProvider;
import com.github.benmanes.caffeine.cache.CacheLoader;
import com.github.benmanes.caffeine.cache.Caffeine;
import com.github.benmanes.caffeine.cache.LoadingCache;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Header;
import io.jsonwebtoken.IncorrectClaimException;
import io.jsonwebtoken.JwsHeader;
import io.jsonwebtoken.Jwt;
import io.jsonwebtoken.JwtParser;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SigningKeyResolver;
import io.jsonwebtoken.security.SignatureException;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.Key;
import java.security.PublicKey;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
public class RiscDemo {
public static void main(String[] args) {
// 消息請求頭中Authorization: Bearer <token>中的<token>
String token = \"
<token>
\";
// Client ID
String clientId = \"
<Client ID>
\";
Jwt<?, Object> jwt = validateSecurityEventToken(token, clientId);
if (Objects.isNull(jwt)) {
// 驗簽失敗,進行自己邏輯處理
} else {
// 驗簽成功,進行自己邏輯處理
}
}
/**
* 對Authorization頭域中的token進行驗簽
*
* @param token 消息請求頭中Authorization: Bearer <token>中的<token>
* @param clientId Client ID
*
* @Return 返回為null,則表示驗簽失敗,否則表示驗證成功
*/
public static <H extends Header<H>, B> Jwt<H, B> validateSecurityEventToken(String token, String clientId) {
Jwt<H, B> jwt = null;
try {
/**
* 公開配置信息地址:https://risc.cloud.huawei.com/v1beta/public/risc/.well-known/risc-configuration
* 公開配置信息中的issuer值
*/
String issuer = \"id.cloud.huawei.com\";
// 公開配置信息中的jwks_uri值
String jwksUri = \"https://risc.cloud.huawei.com/v1beta/public/risc/certs\";
// 獲取公鑰信息
JwkProvider huaweiCerts = new UrlJwkProvider(new URL(jwksUri), null, null);
LoadingCache<String, PublicKey> cache = Caffeine.newBuilder()
.expireAfterWrite(1, TimeUnit.DAYS)
.build(new CacheLoader<String, PublicKey>() {
@Override
public @Nullable PublicKey load(@NonNull String key) throws Exception {
return huaweiCerts.get(key).getPublicKey();
}
});
SigningKeyResolver signingKeyResolver = new SigningKeyResolver() {
private PublicKey getPublicKey(JwsHeader<?> jwsHeader) {
try {
return cache.get(jwsHeader.getKeyId());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override
public Key resolveSigningKey(JwsHeader jwsHeader, Claims claims) {
return getPublicKey(jwsHeader);
}
@Override
public Key resolveSigningKey(JwsHeader jwsHeader, String s) {
return getPublicKey(jwsHeader);
}
};
// 驗證并解析消息內容
JwtParser parser = Jwts.parserBuilder()
.requireIssuer(issuer)
.requireAudience(clientId)
.setAllowedClockSkewSeconds(60)
.setSigningKeyResolver(signingKeyResolver)
.build();
jwt = parser.parse(token);
} catch (IncorrectClaimException e) {
// 消息的claim無效,針對異常進行處理(如:日志記錄)
e.printStackTrace();
} catch (SignatureException e) {
// 驗簽失敗,針對異常進行處理(如:日志記錄)
e.printStackTrace();
} catch (MalformedURLException e) {
// 無效的jwksUri,檢查傳入的jwksUri是否與https://risc.cloud.huawei.com/v1beta/public/risc/.well-known/risc-configuration返回jwks_uri一致
e.printStackTrace();
} catch (Exception e) {
// 其他異常,業務自行處理
e.printStackTrace();
}
return jwt;
}
}
2.處理消息體。
消息體格式如下
{
\"aud\": \"<
開發者Client ID
>\",
\"iss\": \"id.cloud.huawei.com\",
\"iat\": 1727619834,
\"jti\": \"6672ed7d5c5e4c3c92f343ecac40f326\",
\"events\": {
\"https://schemas.openid.net/secevent/risc/event-type/account-purged\": {
\"subject\": {
\"sub\": \"<
觸發事件用戶的UnionID
>\",
\"subject_type\": \"iss_sub\",
\"extra\": \"<
觸發事件用戶的OpenID
>\",
\"iss\": \"id.cloud.huawei.com\"
}
}
}
}
其中,各字段含義如下:
本文主要引用參考HarmonyOS官方網站
發表于 04-16 17:43
、能力范圍
登錄:提供登錄服務,讓用戶使用華為賬號快速登錄元服務。
獲取華為賬號用戶信息:獲取用戶的基本開放信息,如頭像、手機號、收貨地址、發票抬頭。
未成年人模式:獲取未成年人模式的開啟狀態及年齡段
發表于 03-31 12:08
云互聯網,通常稱為云計算,是一種基于互聯網的計算模式,它允許用戶通過網絡訪問和使用遠程服務器上的存儲、管理和處理數據的資源。主機推薦小編為您整理發布云互聯網的詳細解釋。
發表于 01-07 09:50
?417次閱讀
近日,內容分發網絡服務商Cloudflare發布了其年度互聯網流量趨勢報告,揭示了2024年全球互聯網流量的關鍵變化和持續趨勢。 據報告顯示,今年全球
發表于 12-18 11:00
?754次閱讀
中信證券近日發布的研報指出,2025年互聯網板塊整體向上發展的機遇明顯大于向下的風險。當前,互聯網板塊正處于業績預期、估值及外資持股比例均處于歷史低位的階段,這為投資者提供了較為有利的入場時機
發表于 12-17 14:22
?602次閱讀
北京時間12月16日18時,我國在海南文昌衛星發射中心成功實施了一次重要的航天發射任務。此次發射使用了長征五號乙運載火箭,以一箭10星的方式將衛星互聯網低軌01組衛星成功送入預定軌道,標志著發射任務
發表于 12-17 11:06
?664次閱讀
喜訊!華秋榮獲億邦動力2024產業互聯網千峰獎·數字供應鏈!這是華秋連續第五年獲此榮譽。12月6日晚,在“2024億邦產業互聯網峰會——千峰之夜”頒獎晚宴上,在一百余位產業互聯網企業決
發表于 12-12 18:17
?518次閱讀
據外媒報道;歐洲監管機構認為Meta和谷歌的一個廣告營銷項目違反了谷歌公司制定的禁止向未成年人投放個性化廣告的規則,目前已經被歐盟委員會(European Commission)官員調查。歐洲監管
發表于 12-11 16:10
?483次閱讀
。大力發展基于IPv6的下一代互聯網,有助于提升我國網絡信息技術自主創新能力和產業高端發展水平。IPv6能夠高效支撐移動互聯網、物聯網、工業
發表于 10-09 13:37
?935次閱讀
首先,我想說對不起,如果我的帖子在錯誤的線程中。在那之后,我想問一個問題,我的 esp12E 已連接到 Wifi,但它無法連接到互聯網,即使 wifi 連接到互聯網和其他設備,它仍然完美地使用互聯網
發表于 07-09 07:11
之間的互聯互通,實現數據的實時采集、傳輸和處理。因此,網絡基礎設施的建設和優化是工業互聯網平臺的關鍵。 數據采集與處理 數據是工業互聯網平臺的核心,數據采集與處理能力直接影響平臺的性能
發表于 07-02 09:37
?1095次閱讀
今年的政府工作報告中,首次提到了“人工智能+”這一概念,不禁讓人聯想到2015年首度提出的“互聯網+”。從“互聯網+”到“人工智能+”,概念差異的背后,本質上是生產力的重大革新。過去十
發表于 06-18 08:05
?180次閱讀
2024年,被視為中國衛星互聯網發展黃金年的契機。年中至今,試驗衛星發射頻繁,各地產業扶持政策相繼落地,終端應用也逐漸普及開來。各方人士齊心
發表于 06-07 15:42
?962次閱讀
行業的5萬余家樣本企業2022年數據測算分析,全面展現我國工業互聯網平臺推廣應用整體態勢與發展成效。 洞察1:我國“綜合型+特色型+專業型”工業互聯
發表于 06-05 11:01
?539次閱讀
評論