[英]How to Fetch Token to access APIM from Function App with Managed identity
我正在嘗試從 Azure Function 訪問 APIM,並希望 APIM 通過托管身份令牌進行身份驗證。 我已將系統分配的標識分配給 function 應用程序。我正在關注此(示例)[https://docs.microsoft.com/en-us/azure/app-service/overview-managed-identity?tabs=dotnet#asal ] 生成令牌。 在下面的行中,如果我將“https://vault.azure.net”提供給 GetAccessTokenAsync 方法,我將獲得令牌。 但我希望觀眾是 APIM,所以我提供了https://azure-api.net ,就像最后一行中提到的那樣。 但我得到了例外。 如何提供 APIM Url 來獲取訪問令牌?
using Microsoft.Azure.Services.AppAuthentication;
var azureServiceTokenProvider = new AzureServiceTokenProvider();
string accessToken = await azureServiceTokenProvider.GetAccessTokenAsync("https://vault.azure.net");
string accessToken = await azureServiceTokenProvider.GetAccessTokenAsync("https://azure-api.net");
更新。 我認為列出資源有問題。 因為當我給出正確的資源名稱時,它說資源在租戶中不存在,盡管當我通過 az cli 運行時我可以看到訂閱在同一個租戶下。
正如我在評論中提到的,您需要在 Azure AD 中注冊一個應用程序來表示 API ,然后您可以獲得它的令牌(即使用上一個鏈接中的Application ID URI
)。
string accessToken = await azureServiceTokenProvider.GetAccessTokenAsync("<Application ID URI>");
你需要知道的一些事情:
You can use azureServiceTokenProvider
to get the token for https://vault.azure.net
, https://managment.azure.com
, because they are all the APIs exposed by Microsoft, ie azure keyvault rest api and azure management rest api ,本質上都是微軟注冊的AD App,所以如果要獲取自己的API的token,需要先注冊AD App,代表API。
另外,當您使用托管身份獲取令牌時,本質上它使用客戶端憑據流來獲取令牌,實際上托管身份是由azure管理的服務主體(即企業應用程序)。 如果您需要在獲取訪問令牌時驗證roles
聲明,請記住利用應用程序角色。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.