簡體   English   中英

如何獲取令牌以從具有托管身份的 Function 應用程序訪問 APIM

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM