使用 Entra ID 作为客户端凭证流程的身份提供者

问题描述 投票:0回答:1

我已在我的 Entra ID 上注册了一个应用程序(只是作为空占位符创建,未与应用程序服务等 Azure 资源连接;仅受众:Microsoft.Graph),并且我使用邮递员成功检索了令牌。
我有一个 Spring Boot 应用程序,在我的电脑上本地运行,它公开了一个 API;作为测试,我尝试使用 Entra 的 jwt 令牌以编程方式“保护”此 API:

我的身份验证配置 My Auth config


我的.properties enter image description here


我非常确定 Spring Boot 代码是正确的(我已经使用另一个身份提供商的令牌进行了测试,一切都按预期工作)。
但是,当我尝试使用 Entra 的令牌(有效令牌;jwt.io 转换成功)时,我收到类似“无效签名”的错误。检查日志,我可以看到 Spring Boot 应用程序实际上正在检索证书列表,因此我假设颁发者 uri 是正确的(无论如何,我从 jwt.io 转换后的令牌中获取它)。
我不明白这个问题,对我所缺少的有什么建议吗? (观众图有问题吗?)非常感谢

另一个测试
我还尝试以编程方式验证令牌(只是为了查看令牌是否格式错误、无效等):

enter image description here
对于密钥,我使用从 jwt.io 检索的模数、指数和加密(RSA),但代码仍然给出了无效令牌的错误(使用来自其他身份提供商的令牌尝试相同的操作效果很好) .

spring-boot azure oauth-2.0 microsoft-entra-id
1个回答
0
投票

注意:带有 aud 的访问令牌作为 Microsoft Graph 并不意味着要进行验证。

  • 由于 Microsoft Graph API 不适用于您的应用程序。
  • 它使用不同的签名方法,因此您无法使用相同的方法验证 Graph API 令牌。
  • 因此,您可以直接使用 Microsoft Graph API 访问令牌,而无需验证它来调用 API。

当我尝试验证 Microsoft Graph API 令牌时,我得到了相同的错误

我生成了访问令牌,其scope

https://graph.microsoft.com/.default

enter image description here

enter image description here

因此直接传递令牌而不验证它并调用 Microsoft Graph API。

如果您想验证 API,请添加范围:

enter image description here

并添加API权限,如下所示:

enter image description here

使用 scope 作为 api://ClientID/.default:

 生成了 
访问令牌

签名验证成功

enter image description here

参考:

spring security - 使用 Azure AD 验证签名 - 堆栈内存溢出,作者:junnas

© www.soinside.com 2019 - 2024. All rights reserved.