【问题标题】:How to Automate Grant of API Permission approval in Azure AD B2C using MS Graph如何使用 MS Graph 在 Azure AD B2C 中自动授予 API 权限批准
【发布时间】:2020-11-23 19:51:58
【问题描述】:

我开发了一个基于域的建模工具和代码生成器,它能够根据 DDD 捕获域模型并自动生成 ASP.Net Web API 微服务。

我还创建了一个 Azure B2C CLI 工具,它使用 MS Graph API 以编程方式为每个 Web ASP.NET Web API 生成一个 Azure B2C AD 应用程序,其中包括所有用于保护某些生成的 Web API 操作的可能范围。

由于其中一些生成的 API 服务经常通过 REST 和/或 gRPC 与其他生成的服务交互,Azure B2C CLI 工具还添加了每个 Web API 所需的依赖 API 权限列表,以便与其他 Web API。

我的 Azure B2C CLI 工具运行良好,正在为家庭租户中的每个域服务创建/更新底层 Azure B2C Web/API 应用程序以及必要的服务主体

目前我仍然需要登录 Azure 门户,以便为每个 B2C 应用程序授予 API 权限。

我的问题是:是否可以使用我用来创建相同 B2C Web/API 应用程序的 B2C 应用程序自动授予 API 权限?

这似乎应该是可能的,因为 Azure B2C CLI 工具的 B2C 应用程序是这些创建的应用程序的所有者。

为了帮助说明和支持我的问题,我在下面提供了一些屏幕截图。

首先,下图显示了我的 Azure B2C CLI 工具 运行的权限集,以便通过 MS Graph API 为每个 Web API 创建其他 B2C 应用程序。

在每次传递时,Azure B2C CLI 工具都会处理一个特定的域模型,以了解该模型中每个域服务的定义,并将自动在 Azure B2C 中为特定域模型中的每个服务创建一系列 B2C 应用程序。

以下域模型有 4 个域服务,结果是我的 Azure B2C CLI 工具生成了 4 个 B2C 应用程序,如下图所示 ..

Azure B2C CLI 工具为每个 API 操作创建尽可能多的权限范围项,并将其添加到基础 API OAuthPermissionScopes。以下是为“WorkSpace”和“SharedServices”Web API 生成的权限范围服务的一些示例...

Azure B2C CLI 还会向每个生成的 B2C API 应用程序添加任何 API 权限。以下示例显示“CoreServices”API 需要“SharedServices”应用 API 和“WorkSpace”应用 API 的权限

完成后,我可以登录 Azure 门户并手动为每个 API 授予这些权限。

我不想手动授予这些权限,而是希望通过我创建的 Azure B2C CLI 工具中的 MS Graph 以编程方式授予这些权限。

代码生成器域建模工具将生成上百个服务,因此我希望尽可能自动化地保护生成的域服务,包括授予 API 权限。

允许我在 Azure B2C CLI 工具中完全自动化此过程的 MS Graph API 是什么?

【问题讨论】:

    标签: azure asp.net-web-api microsoft-graph-api azure-ad-b2c


    【解决方案1】:

    Microsoft Graph 目前不支持“授予管理员同意”功能。

    AAD Graph 有一个端点 https://graph.windows.net/myorganization/consentToApp?api-version=2.0,用于授予管理员许可,但它仅在 Microsoft 中可用。从外部调用这个端点会得到this error

    您可以考虑使用 Azure CLI cmd az ad app permission grantaz ad app permission admin-consent --id $appid。见参考here

    这 2 个 cmd 之间存在差异。您可以在我之前的answer中找到更多详细信息。

    【讨论】:

    • az cmd 方法仍然需要管理员进行 az 登录,因此基本上无法满足完全自动化此过程的需求。我通过一个 GitHub Action 运行我的 B2C CLI,该操作在包含生成的代码和域模型的 repo 提交后执行。这一切都在自托管服务器上运行,旨在完全自动化代码生成和 B2C 配置。我想如果我可以以管理员身份运行自托管进程,那么可以以编程方式运行 az cmd 方法。我不知道这是否可能。也不知道怎么做。
    • 您可以使用服务主体以非交互方式登录 Azure。只需确保服务主体有权授予管理员同意。 az login --service-principal -u -p --tenant 如果您要登录 B2C,请使用 --allow-no-subscriptions 标志以及租户标记,否则您将收到错误消息,因为 B2C 没有订阅。 lnx.azurewebsites.net/non-interactive-login-in-azure-cli-2-0docs.microsoft.com/en-us/cli/azure/authenticate-azure-cli
    • @JohnKears 你看过@ScottMcNeany 的建议吗?使用服务主体登录。
    • @Allen Wu... 我刚刚阅读了您提供的链接。看来我们可以通过这个 CLI az login --service-principal -u -p --tenant (根据 Scott 的博客)使用服务主体登录到 Azure。我将使用用于创建 API 权限集的 AD 应用程序进行尝试。谢谢你告诉我。
    猜你喜欢
    • 1970-01-01
    • 2021-08-23
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 2020-05-09
    • 2019-08-10
    相关资源
    最近更新 更多