使用应用程序服务的Azure MSI

时间:2018-06-29 10:54:30

标签: azure web-applications

我正在尝试使用MSI和AAD身份验证保护我的前端Webapp的后备服务。

当我通过面向公众的Webapp调用支持服务时,我一直收到401。我已将公共Web应用程序添加为支持服务的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.

更新显然是实际的端点值,但此处未在stackoverflow上公开。此外,我应该提及的是,在使用我的个人凭据xxx@xxx.xxx授权后,直接调用API端点即可正常工作。该问题与webapp试图向webapi标识自己有关,即使该appapp是已注册的应用程序,也已为其分配了webapi资源所需的IAM权限。

1 个答案:

答案 0 :(得分:1)

该错误表明它尝试使用MSI,但没有。您确定要在启用MSI的Web应用程序上运行此代码吗?

此外,您需要在Azure AD中用您的API的应用程序ID URI或应用程序ID替换"https://<mywebapi>.azurewebsites.net"换句话说,这需要与您为API配置的有效受众匹配。