众多周知,建筑工地的工人来源地广泛,人力管理难度较大,不少地方已提出智慧工地引入实名制考勤门禁,包括引入人脸门禁识别一体机、人脸识别门禁终端、刷脸考勤机等实名制身份识别一体机,对进出工地人员进行实名
发表于 10-31 09:40
•233次阅读
随着国家发改委136号文的全面实施,新能源电站价值评估体系正经历深刻变革。新政策要求风电、光伏等新能源电量全量进入电力市场,电价完全由交易形成。
发表于 07-21 09:59
•1676次阅读
近日,广州某酒店就收到一则罚单,也是首张“违反反恐法被处罚款”的罚单。到底该酒店是违反了什么法律法规呢?众所周知,入住酒店旅馆都需要进行实名制登记,以便及时发现安全隐患。通过身份证或人脸识别进行
发表于 05-21 10:31
•626次阅读
在人工智能技术蓬勃发展、消费品以旧换新政策等利好驱动下,LED行业正迎来技术迭代提速与政策红利释放的叠加机遇期。国星光电紧抓机遇,加速科技突围,深耕新型显示技术,推动五大显示场景全面开花。
发表于 05-16 11:44
•749次阅读
随着2025年国家新能源政策的密集出台,分布式光伏行业迎来了关键的政策窗口期——“430”和“531”节点。新政对分布式光伏项目的备案流程、消纳条件和收益模式提出了更高要求,尤其是“5
发表于 05-07 16:11
•648次阅读
一、概述
通过订阅用户信息变更,您可以接收有关用户及其账户的重要更新。当用户取消元服务的授权信息、注销华为账号时,华为账号服务器会发送通知到元服务,元服务可以根据通知消息进行自身业务处理。
二、用户信息变更事件介绍
三、订阅用户信息变更
订阅步骤如下:
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
,为了杜绝“黄牛卖票”的现象,一些演唱会也采用实名制方式进行验票。通过身份证识别终端来识别身份证人和进场的人是不是同一个。但这种实名制验票方式也容易出现漏洞,有人拿着黄牛
发表于 04-10 15:35
•905次阅读
01政策驱动,智能监测成合规刚需化工生产设备的高风险性对安全管理提出严苛要求。应急管理部在《2025年危险化学品安全监管工作要点》(征求意见稿)中明确要求,涉及压缩机、高危泵等关键机泵的重大危险源
发表于 04-01 11:52
•915次阅读
。Account Kit提供的SampleCode示例工程体现了Account Kit提供的登录、授权头像昵称、快速验证手机号、收货地址、发票抬头、未成年人模式等特性,可参考该工程进行应用的相关内容开发。
一
发表于 03-31 12:08
东莞卓尔凡电源出口美国 UL 变压器新政策:单相 120V 变 220V 控制变压器 在全球贸易往来日益频繁的当下,电气设备的跨境流通面临着诸多标准与规范的考验。对于出口美国的变压器而言,UL 认证
发表于 02-21 09:41
•920次阅读
据韩国媒体报道,韩国半导体行业的巨头SK海力士,为应对美国可能出台的新政策,已开始对其所使用的中国半导体电子设计自动化(EDA)软件进行紧急审查。这一举措反映了全球半导体产业在地缘政治紧张局势下
发表于 02-18 09:47
•762次阅读
摘要: 随着分布式光伏产业的快速发展,“接网难” 问题日益凸显,成为制约其规模化应用的瓶颈。新政策的出台为解决这一问题指明了方向,推动分布式光伏向 “四可”(可观、可测、可控、可调)管理模式转变
发表于 02-17 15:24
•1230次阅读
近日,OpenAI宣布了一项新政策,旨在改变其训练人工智能模型的方式,以明确拥护“知识自由”的理念。OpenAI强调,无论一个话题多么具有挑战性或争议性,都应当被平等对待和呈现。 据OpenAI表示
发表于 02-17 14:42
•3651次阅读
绿色能源新政策下:3150KVA 380V 变 660V 三相变压器在光伏发电中的关键作用 在全球积极应对气候变化、大力推动绿色能源发展的大背景下,一系列绿色能源新政策相继出台,为新能源产业
发表于 02-17 11:11
•751次阅读
在2024年家电以旧换新政策的刺激下,去年智能家居消费回升近3成、芯片厂单季度营收涨超50%。今年家电国家补贴政策继续加大力度,微波炉、净水器、洗碗机、电饭煲等4类家电产品纳入补贴范围。这对芯片厂商
发表于 01-15 11:03
•1063次阅读
评论