想象一下在Windows Azure中注册的客户端和服务应用程序 .
客户端是一个控制台,可在无人值守的本地运行(例如,在一夜之间执行测试)该服务是受oAuth保护的WebAPI服务,通常使用Azure中托管的OpenID Connect进行访问 .
客户端如何在不进行任何类型的用户登录交互的情况下对服务进行身份验证(即应用程序使用ADAL .Net对服务进行身份验证)?
我尝试了ADAL .Net Daemon to WebAPI sample但它仍然弹出一个身份验证对话框......
谢谢!
[ edit ]这里有一些代码来显示 very 大致如何从客户端进行通信 . 所有app id等都是正确的 .
var authContext = new AuthenticationContext("https://login.windows.net/common");
var result = await authContext.AcquireTokenAsync(ServiceAppId, ClientCredential);
var client = new HttpClient
{
BaseAddress = new Uri("https://localhost:44301/"),
};
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
AuthenticationHeaderScheme.Bearer,
result.AccessToken);
var response = await client.GetAsync("api/something");
var jsonString = response.Content.ReadAsStringAsync().Result;
这只会产生登录页面HTML ...
我也尝试将 [HostAuthentication("OAuth2Bearer")]
等添加到服务api控制器并添加OWIN启动逻辑,但无济于事,例如:
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
TokenValidationParameters = new TokenValidationParameters
{
ValidAudience = myRealm,
},
Tenant = "mytenant.onmicrosoft.com",
AuthenticationType = BearerAuthenticationType.OAuth2Bearer,
});
1 回答
编辑:重新阅读原帖,我想我现在明白发生了什么 . 您提到您的应用程序上有OpenId Connect,当您点击Web API时,您会收到HTML . 我怀疑当你点击Web API而不是Oauth2中间件时会触发OpenId Connect中间件 . 如果是这种情况,我建议您查看http://www.cloudidentity.com/blog/2014/04/28/use-owin-azure-ad-to-secure-both-mvc-ux-and-web-api-in-the-same-project/,了解如何在同一个项目中使用基于重定向的中间件和OAuth2保护的资源中间件共存 .
原答案:你试过https://github.com/AzureADSamples/NativeClient-Headless-DotNet吗?那应该做你想要的 . 对不起电话简洁,电话:-) HTH V.