想象一下在Windows Azure中注册的客户端和服务应用程序。
客户端是一个控制台,无人值守的内部部署(例如,一夜之间执行测试) 该服务是受oAuth保护的WebAPI服务,通常使用Azure中托管的OpenID Connect进行访问。
客户端如何对服务进行身份验证而不进行任何类型的用户登录交互(即应用程序使用ADAL .Net对服务进行身份验证)?
我尝试了ADAL .Net Daemon to WebAPI sample,但它仍会弹出身份验证对话框...
谢谢!
[编辑]以下是一些代码,用于显示非常大致如何与客户进行通信。所有应用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,
});
答案 0 :(得分:2)
原始答案:你有没有试过https://github.com/AzureADSamples/NativeClient-Headless-DotNet? 那应该做你想要的。对不起电话简洁,电话:-) HTH 诉