【问题标题】:Assign custom role to Azure Active Directory System managed identity将自定义角色分配给 Azure Active Directory System 托管标识
【发布时间】:2020-11-18 05:05:34
【问题描述】:

为了在 APIS 之间建立 Azure AD 系统托管标识,我在应用程序的清单中为我的目标 API 定义了一个自定义角色。

"appRoles": [
    {
        "allowedMemberTypes": [
            "Application"
        ],
        "description": "Allow the application to read all things as itself.",
        "displayName": "Read all things",
        "id": "86a914fa-a862-4962-9975-be5c9a05dca3",
        "isEnabled": true,
        "lang": null,
        "origin": "Application",
        "value": "Things.Read.All"
    }

现在我想将此角色分配给将要调用它的 api,以便我可以在从 AzureServiceTokenProvider 收到的访问令牌中验证它。 问题是我在应用注册中没有看到系统分配的身份。

在标识(声明系统分配标识的位置)“Azure 角色分配”下有一个按钮,可用于添加角色分配。这里有一个可用的角色列表。我正在寻找我定义的自定义角色,它不在下拉列表中。

如何将定义的角色分配给系统身份,以便它可以访问它被允许的一个或多个 API,而不再访问?我希望在访问令牌中获得这个角色。这是正确的期望吗?

【问题讨论】:

    标签: azure-active-directory azure-managed-identity


    【解决方案1】:

    您定义的是app role。但是“Azure 角色分配”是为订阅分配角色。它们完全是两种不同的东西。

    您可以使用 Microsoft Graph API 来Grant an appRoleAssignment to a service principal

    POST https://graph.microsoft.com/v1.0/servicePrincipals/{id}/appRoleAssignedTo
    Content-Type: application/json
    Content-Length: 110
    
    {
      "principalId": "principalId-value",
      "resourceId": "resourceId-value",
      "appRoleId": "appRoleId-value"
    }
    

    在此示例中,{id}{resourceId-value} 都是资源服务主体的对象 ID,它是与您在其中创建 appRoles 的 Azure AD 应用关联的企业应用。您可以像这样找到它:

    {principalId-value} 将是 Azure 资源托管标识的 ID。在这里找到它:

    {appRoleId-value} 是您在清单中创建的应用角色的 ID。

    您可以使用管理员帐户登录Microsoft Graph Explorer 以调用 Microsoft Graph API。

    如果要验证结果是否成功,请导航到Azure Portal -> Azure Active Directory -> 企业应用程序 - > 所有应用程序。输入 Azure 资源的名称。

    然后你会发现app角色(应用权限)已经被授予了。

    【讨论】:

    • 艾伦,非常感谢您的详细回复,非常感谢您准确指出从哪里获取每个 ID。我正在一个具有多层授权的企业环境中对此进行测试。当我使用我获取的访问令牌时,出现错误 {“code”:“InvalidAuthenticationToken”,“message”:“访问令牌验证失败。无效的受众。”,我让管理员尝试,他得到了同样的结果错误。任何想法
    • @Tauqir 看起来您正在获取不正确资源或范围的令牌。正确的应该是https://graph.microsoft.com/.default
    • Allen,澄清一下,我的问题是关于在授予 appRole 的步骤中调用图形 api。是否有该步骤的用户界面。最后,我想获得我定义了我的 appRole 的 API 的令牌。我使用该服务的 ApplicationIDURI 作为 azureServiceTokenProvider.GetAccessTokenAsync(resource) 中的资源。这就是我期望这个角色出现的地方。我的解决方案是端到端工作,但由于令牌中缺少这个角色,我无法在我的 Target api 中添加角色验证。
    • @Tauqir 此步骤没有 UI。如果您按照我的步骤操作,则该角色应包含在访问令牌中。您能否更清楚地说明您现在还面临什么问题?
    • 我无法获得 .default 范围的令牌。我可以为 graph.microsoft.com 买一份。我会问一个不同的问题。这是有用的讨论,但不在这里隐藏。
    猜你喜欢
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2021-06-14
    • 2019-05-05
    • 1970-01-01
    • 2020-09-21
    • 2021-10-17
    相关资源
    最近更新 更多