验证Azure静态Web应用发送给自带函数的令牌时如何获取对应kid的签名证书
结论:该验证方案完全可行
公钥查找失败的原因
你查询的均为Azure AD的公钥端点,而SWA内置认证签发的上下游调用令牌是SWA服务本身独立签发的,与Azure AD无关联,因此不会出现在AAD的公钥列表中。
签名公钥的正确获取路径
访问你的SWA实例专属的OpenID配置端点即可拿到对应公钥:
- 构造并访问地址:
https://<你的SWA实际域名>/.auth/.well-known/openid-configuration,将域名替换为你自己的random-name.azurestaticapps.net即可 - 从返回的JSON配置中提取
jwks_uri字段对应的地址,该地址就是SWA托管的签名公钥集端点 - 访问上述jwks地址,可直接找到和你令牌头中
kid完全匹配的RSA公钥
令牌验证实现建议
你可以直接在函数代码中添加自定义验证逻辑,无需开启函数应用层面的强制认证,不会对现有业务造成影响:
- 签名校验:使用JWKS中匹配到的对应kid的RSA公钥,验证RS256签名的合法性
- 声明校验:需同时验证
iss为你的SWA的/.auth地址、aud为你的函数应用域名、exp未超出有效期、nbf和iat在合法时间范围内 - 密钥轮转适配:SWA会定期更新签名密钥,不要硬编码公钥或kid,建议你的验证逻辑支持定期自动从JWKS端点刷新公钥集,避免密钥轮转后验证失败
内容的提问来源于stack exchange,提问作者Von Williams
相关产品推荐
相关产品推荐

