Я пытаюсь защитить свои службы поддержки для моего веб-приложения, используя MSI и AAD auth.
Я продолжаю получать 401, когда звоню в свои службы поддержки из открытого веб-приложения. Я добавил общедоступное веб-приложение в качестве читателя в раздел IAM служб поддержки.
Что я не могу понять, так это как получить токен доступа, кажется, что независимо от того, какую конечную точку я использую для получения токена доступа, он говорит, что он не найден.
Вот мой код:
{
var azureServiceTokenProvider = new AzureServiceTokenProvider();
string accessToken = azureServiceTokenProvider.GetAccessTokenAsync("https://<mywebapi>.azurewebsites.net").GetAwaiter().GetResult();
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new
AuthenticationHeaderValue("Bearer", accessToken);
RemoteIp = httpClient.GetStringAsync("https://<mywebapi>.azurewebsites.net/api/default/remoteIp").GetAwaiter().GetResult();
LocalIp = httpClient.GetStringAsync("https://<mywebapi>.azurewebsites.net/api/default/localIp").GetAwaiter().GetResult();
ConnectionId = httpClient.GetStringAsync("https://<mywebapi>.azurewebsites.net/api/default/connectionId").GetAwaiter().GetResult();
}
А вот и сообщение об ошибке:
Parameters: Connectionstring: [No connection string specified], Resource: https://<mywebapi>.azurewebsites.net, Authority: .
Exception Message: Tried to get token using Managed Service Identity.
Unable to connect to the Managed Service Identity (MSI) endpoint.
Please check that you are running on an Azure resource that has MSI setup.
UPDATE:
, очевидно, является фактическим значением конечной точки, но здесь не раскрывается в стеке потока. Кроме того, я должен упомянуть, что вызов конечных точек API напрямую работает нормально после того, как я авторизовался с помощью своих личных учетных данных xxx@xxx.xxx. Проблема связана с тем, что веб-приложение пытается идентифицировать себя с веб-интерфейсом, даже если это зарегистрированное приложение, которому назначены необходимые права IAM на ресурсе веб-интерфейса.