我正在构建一组自定义 Azure Functions (Java),供 iOS 和 Android 本机客户端使用本质上和 Oauth2 身份验证策略访问。
我能够从 https://login.microsoftonline.com/XXXXX-XXXXXXXXX/oauth2/v2.0/token 成功获取不记名访问令牌,但是当我将此令牌提供给我的 Azure 函数并尝试在代码中对其进行验证时,我收到以下错误。在验证不记名令牌时,我正在执行类似于此处提供的示例的操作:https://dev.to/425show/secure-apis-with-azure-functions-java-azure-ad-and-ms-graph-49p1
<块引用>AADSTS50013:断言签名验证失败。 [原因 - 的 提供的签名值与预期的签名值不匹配。, 客户端使用的密钥指纹:'XXXXXXXXXXXXXXXXXXXXXXXXXXX'
微软的文档很难用于应该是这样一个标准用例。任何帮助将不胜感激。
答案 0 :(得分:0)
我之前回答过几个类似的问题。根本原因是断言中使用的访问令牌是用于 Microsoft Graph api 资源还是用于 web api 资源。您可以通过解析令牌以查看 aud
声明来确定令牌的颁发者。
如果您使用此访问令牌调用 Microsoft Graph api,则只需将 scope
设置为:https://graph.microsoft.com/.default
。
如果您使用访问令牌调用 web api(这是您在 Azure 门户中公开的 api),那么您需要将 scope
设置为:{{1} }.
请注意:作用域内只能放置一种类型的api资源。