首页 > 解决方案 > Microsoft Graph API 角色声明不在令牌中,但添加了应用程序权限

问题描述

我正在尝试连接到 Microsoft Graph API 以使用 excel 函数,作为服务器到服务器的连接/流。 https://docs.microsoft.com/en-us/graph/excel-use-functions

在 Azure AD 中,我构建了注册的应用程序:天蓝色注册应用

我已经创建了秘密......并且还添加了 API 权限。应用权限

在邮递员中,我可以很好地获得令牌......但我注意到角色不包含在令牌中。这是请求: 令牌请求

然后,当我向 RATE 的 excel 函数发出请求时,我收到此错误:

{
    "error": {
        "code": "AccessDenied",
        "message": "Either scp or roles claim need to be present in the token.",
        "innerError": {
            "date": "2021-08-17T14:31:04",
            "request-id": "b0d65e3c-4acd-4a8a-82c4-1c4c5f2216ac",
            "client-request-id": "b0d65e3c-4acd-4a8a-82c4-1c4c5f2216ac"
        }
    }
}

我仍然在这里的每一篇文章都提到 API 权限并以管理员身份授予同意……我已经完成了,但我仍然收到错误消息。有什么想法吗?

标签: microsoft-graph-apiazure-ad-graph-api

解决方案


请检查是否有任何声明映射策略链接到应用程序服务主体。

  1. 导航到 Azure Active Directory > 企业应用程序 > 使用您在令牌请求中使用的客户端 ID 进行搜索 > 复制应用程序的对象 ID。请记住,此对象 ID 与应用程序注册下存在的应用程序对象的对象 ID 不同。
  2. 运行Get-AzureADServicePrincipalPolicy -Id object_id_copied_in_step_1 | fl以检查是否有任何声明映射策略链接。
  3. 如果有与其链接的 cliams 映射策略,请运行Remove-AzureADServicePrincipalPolicy以删除该策略。

在https://jwt.ms解码您的不记名令牌,以确认角色声明是否已填充。在这种情况下不会填充 SCP 声明,因为它仅在用户上下文中获取令牌时才会填充。


推荐阅读