我尝试使用适用于Windows Azure Active Directory的OWIN提供程序来保护ASP.NET Web API。我已将web api配置为使用Windows Azure JWT承载令牌,如下所示:
public void Configuration(IAppBuilder app)
{
app.UseWindowsAzureBearerToken(new WindowsAzureJwtBearerAuthenticationOptions()
{
Audience = "http://mywebsitename.azurewebsites.net",
Tenant = "mydefaultdirectory.onmicrosoft.com"
});
}
然后我创建了一个与web api租户属于同一目录的客户端应用程序。我指定了授予客户端应用程序访问web api的权限。当我尝试创建客户端应用程序并对API进行身份验证时,会出现问题。
客户端只是一个简单的Windows应用商店应用程序,其中有一个按钮点击方法可以对windows azure进行身份验证,而点击的代码甚至如下:
private async void myButton_Click(object sender, RoutedEventArgs e)
{
AuthenticationContext ac = new AuthenticationContext("https://login.windows.net/nameofazureactivedirectorytenant");
AuthenticationResult ar =
await ac.AcquireTokenAsync("api/pathtoresource",
"xxxxxxxx-xxxx-xxxxx-xxxx-xxxxxxxxxxxx");
// Call Web API
string authHeader = ar.CreateAuthorizationHeader();
HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(
HttpMethod.Get, "http://mywebsitename.azurewebsites.net/api/pathtoresource");
request.Headers.TryAddWithoutValidation("Authorization", authHeader);
HttpResponseMessage response = await client.SendAsync(request);
string responseString = await response.Content.ReadAsStringAsync();
}
该应用无法正确创建身份验证上下文,因此我相信我传递的是错误的参数。我已经阅读了很多博客文章和SO答案,但到目前为止没有任何工作,任何帮助都将不胜感激!