給大家?guī)硪恍┬袠I(yè)資訊: 蘋果不是美國最賺錢公司了 現(xiàn)在蘋果公司已經(jīng)不是美國最賺錢公司了;根據(jù)《財富》雜志發(fā)布的2025年美國500強(qiáng)排行榜榜單數(shù)據(jù)
發(fā)表于 06-03 15:29
?264次閱讀
一、概述
通過訂閱用戶信息變更,您可以接收有關(guān)用戶及其賬戶的重要更新。當(dāng)用戶取消元服務(wù)的授權(quán)信息、注銷華為賬號時,華為賬號服務(wù)器會發(fā)送通知到元服務(wù),元服務(wù)可以根據(jù)通知消息進(jìn)行自身業(yè)務(wù)處理。
二、用戶信息變更事件介紹
三、訂閱用戶信息變更
訂閱步驟如下:
1.登錄華為開發(fā)者聯(lián)盟,選擇“管理中心 > API服務(wù) > API庫”。
2.在App Services找到RISC。
3.點擊啟用按鈕,選擇您的項目,點擊確定。
4.點擊訂閱通知按鈕,在彈窗中配置回調(diào)地址及訂閱范圍。
說明
回調(diào)地址:在開啟訂閱通知后,若華為用戶信息存在變更,會通過發(fā)送消息到該地址。
訂閱范圍:訂閱的用戶信息變更事件,詳見用戶信息變更事件介紹。
四、處理通知消息
華為賬號服務(wù)器向元服務(wù)投遞消息。元服務(wù)接收到消息后需要先對消息頭中的令牌進(jìn)行驗簽,確保消息的完整有效性后解析并獲取用戶信息變更事件詳情。具體步驟如下:
1.驗證消息頭中的令牌簽名。
您可通過任何JWT庫(例如:jwt.io)對其進(jìn)行解析與驗證。
無論使用哪種庫,您均需完成如下操作:
調(diào)用接口(https://risc.cloud.huawei.com/v1beta/public/risc/.well-known/risc-configuration),獲取發(fā)行者標(biāo)識(issuer)與簽名密鑰證書URI(jwks_uri)。
通過依賴的JWT庫,對消息頭中的令牌進(jìn)行解析,獲取簽名的KeyId。
通過簽名的KeyId,從簽名密鑰證書URI中獲取到JWT簽名的公鑰。
校驗JWT簽名中的aud與訂閱用戶信息變更中提供的Client ID一致。
校驗JWT簽名中的issuer與發(fā)行者標(biāo)識(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)) {
// 驗簽失敗,進(jìn)行自己邏輯處理
} else {
// 驗簽成功,進(jìn)行自己邏輯處理
}
}
/**
* 對Authorization頭域中的token進(jìn)行驗簽
*
* @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);
}
};
// 驗證并解析消息內(nèi)容
JwtParser parser = Jwts.parserBuilder()
.requireIssuer(issuer)
.requireAudience(clientId)
.setAllowedClockSkewSeconds(60)
.setSigningKeyResolver(signingKeyResolver)
.build();
jwt = parser.parse(token);
} catch (IncorrectClaimException e) {
// 消息的claim無效,針對異常進(jìn)行處理(如:日志記錄)
e.printStackTrace();
} catch (SignatureException e) {
// 驗簽失敗,針對異常進(jìn)行處理(如:日志記錄)
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) {
// 其他異常,業(yè)務(wù)自行處理
e.printStackTrace();
}
return jwt;
}
}
2.處理消息體。
消息體格式如下
{
\"aud\": \"<
開發(fā)者Client ID
>\",
\"iss\": \"id.cloud.huawei.com\",
\"iat\": 1727619834,
\"jti\": \"6672ed7d5c5e4c3c92f343ecac40f326\",
\"events\": {
\"https://schemas.openid.net/secevent/risc/event-type/account-purged\": {
\"subject\": {
\"sub\": \"<
觸發(fā)事件用戶的UnionID
>\",
\"subject_type\": \"iss_sub\",
\"extra\": \"<
觸發(fā)事件用戶的OpenID
>\",
\"iss\": \"id.cloud.huawei.com\"
}
}
}
}
其中,各字段含義如下:
本文主要引用參考HarmonyOS官方網(wǎng)站
發(fā)表于 04-16 17:43
。Account Kit提供的SampleCode示例工程體現(xiàn)了Account Kit提供的登錄、授權(quán)頭像昵稱、快速驗證手機(jī)號、收貨地址、發(fā)票抬頭、未成年人模式等特性,可參考該工程進(jìn)行應(yīng)用的相關(guān)內(nèi)容開發(fā)。
一
發(fā)表于 03-31 12:08
或者因為受到蘋果公司在2024年第四季度中國市場表現(xiàn)不佳,iPhone銷量同比下滑18.2%的不利影響,而且華爾街機(jī)構(gòu)Jefferies和Loop Capital均下調(diào)蘋果評級;Jefferies
發(fā)表于 01-22 15:39
?498次閱讀
給大家?guī)韮蓚€蘋果公司的新消息: 蘋果補(bǔ)繳近110億歐元欠稅? 在愛爾蘭;蘋果公司持續(xù)八年時間的稅務(wù)訴訟畫下句號,蘋果補(bǔ)繳近110億歐元欠稅 。 在2024年9月,歐洲法院裁定
發(fā)表于 01-08 16:35
?893次閱讀
據(jù)外媒報道;歐洲監(jiān)管機(jī)構(gòu)認(rèn)為Meta和谷歌的一個廣告營銷項目違反了谷歌公司制定的禁止向未成年人投放個性化廣告的規(guī)則,目前已經(jīng)被歐盟委員會(European Commission)官員調(diào)查。歐洲監(jiān)管
發(fā)表于 12-11 16:10
?541次閱讀
據(jù)外媒報道,一家巴西公司Gradiente繼續(xù)爭奪著“iPhone”商標(biāo)的所有權(quán),在巴西市場和蘋果公司繼續(xù)展開法律拉鋸戰(zhàn)。 Gradiente在?2000 年在巴西市場推出名為“Gradiente
發(fā)表于 12-04 15:53
?552次閱讀
蘋果公司的一舉一動都牽動了很多從業(yè)者的心;蘋果公司從iPhone7手機(jī)開始正式取消了3.5mm耳機(jī)孔。蘋果雖然取消了3.5mm耳機(jī)孔但是還是有配套的Lightning轉(zhuǎn)3.5耳機(jī)轉(zhuǎn)接頭銷售,現(xiàn)在多國
發(fā)表于 11-20 16:51
?3777次閱讀
蘋果2024 財年第四季度業(yè)績數(shù)據(jù)已經(jīng)公布。蘋果公司的營收實現(xiàn)6%的增長達(dá)到949.3億美元,財務(wù)業(yè)績表現(xiàn)還是不錯。在2024財年第4財季,蘋果公司實現(xiàn)營收949.3億美元,同比增長6
發(fā)表于 11-02 19:35
?828次閱讀
蘋果公司近期動作頻頻,我們來看看蘋果公司近期想收購的兩家公司,一個是衛(wèi)星通訊公司Globalstar(全球星);一個是軟件開發(fā)公司Pixel
發(fā)表于 11-02 17:51
?1728次閱讀
今日,蘋果公司正式發(fā)布了iOS 18.1正式版更新,為海外iPhone用戶解鎖了多項創(chuàng)新功能。其中,尤為引人注目的Apple Intelligence系統(tǒng)已正式登陸iPhone 15 Pro及iPhone 16全系等高端機(jī)型,這標(biāo)志著蘋果公司在人工智能領(lǐng)域取得了重要進(jìn)展。
發(fā)表于 10-29 14:39
?1261次閱讀
數(shù)據(jù)統(tǒng)計分析顯示;蘋果公司長期以來一直持續(xù)堅持回購自家股份;近10年來蘋果公司的股票數(shù)量持續(xù)下降;自2013年以來,蘋果公司共計回購了價值7006.1億美元的普通股,已發(fā)行股票數(shù)量較峰
發(fā)表于 09-25 11:52
?682次閱讀
蘋果公司再次引領(lǐng)科技潮流,最新曝光的專利揭示了其探索利用心跳數(shù)據(jù)解鎖iPhone等設(shè)備的創(chuàng)新構(gòu)想——Heart ID。這一技術(shù)突破,標(biāo)志著蘋果在生物識別領(lǐng)域的又一次大膽嘗試,繼Touch ID指紋解鎖與Face ID面部識別之后
發(fā)表于 08-05 11:43
?834次閱讀
蘋果公司取得了非常不錯的經(jīng)營成績,特別是在消費(fèi)電子市場降溫的大背景下,日前蘋果公布截至6月29日的2024財年第三財季財報統(tǒng)計數(shù)據(jù),蘋果公司實現(xiàn)營收857.77億美元,同比增長4.9%
發(fā)表于 08-03 16:56
?2424次閱讀
我們來看看蘋果公司近期最新消息: 就在全球資本動蕩之際,投行D.A.Davidson將蘋果公司目標(biāo)價上調(diào)至260美元;而此前給出的目標(biāo)價只有230美元;說明韋德布什投行很看好蘋果公司;特別是蘋
發(fā)表于 08-02 16:55
?826次閱讀
評論