Azure AD 中自定义 API 托管标识的开发人员支持

Developer support with Managed Identity for Custom API in Azure AD

我创建了一个在托管 API 的 Azure Web 应用程序之间实施托管身份的提案。所有 API 共享一个应用标识。此应用已定义一个角色。此角色分配给所有服务,因此每个 api 都可以调用其他 api 而无需配置任何密码。 每个应用程序都会验证受众、发行者和权限。

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddJwtBearer(o =>
                {...

每个调用者使用

获取访问令牌
azureServiceTokenProvider.GetAccessTokenAsync().

完成之后,现在的挑战是如何让开发人员使用它。 当呼叫者和被叫者 API 或其中之一在我的 visual studio 中时,没有系统为呼叫者定义的身份,也没有“IDENTITY_ENDPOINT” header从中获取令牌。

既然你说所有的 api 共享一个应用程序身份,那意味着你使用的是用户分配的托管身份而不是系统身份。无论哪种方式,托管身份基本上都是锁定到 azure 服务的一种特殊类型的服务主体,这意味着只有 azure 服务才能使用它们。所以对于开发人员来说,你基本上需要一个 azure 服务,在这种情况下,一个 web 应用程序/应用程序服务来部署东西,以便使用托管身份进行测试。如果您使用托管身份,则没有办法解决这个问题。

但是,根据 https://docs.microsoft.com/en-us/azure/key-vault/general/service-to-service-authentication#authenticating-to-azure-services 使用 appauthentication 库,在本地开发环境中使用您的开发凭据 运行。因此,如果您将角色/访问权限授予所有开发人员的身份,则在本地进行测试就可以了。

其他选项包括创建您自己的应用程序注册/服务主体,以及配置您的 api/应用程序等以使用它们。理论上你可以做同样的事情,例如创建一个单一的应用程序注册和 expose/give 对所有 api 的权限,然后创建一个客户端密码,并让你的所有 api 使用该单一应用程序注册。然后使用 secret/cert whatever 方法作为 azureservicetokenprovider 的连接字符串。 https://docs.microsoft.com/en-us/azure/key-vault/general/service-to-service-authentication#connection-string-support