想象一下在 Windows Azure 中注册的客户端和服务应用程序。
客户端是一个控制台,在无人值守的前提下运行(例如,通宵执行测试) 该服务是受 oAuth 保护的 WebAPI 服务,通常使用托管在 Azure 中的 OpenID Connect 访问。
客户端如何在没有任何类型的用户登录交互的情况下对服务进行身份验证(即应用程序使用 ADAL .Net 对服务进行身份验证)?
我尝试了ADAL .Net Daemon to WebAPI 示例,但它仍然会弹出一个身份验证对话框...
谢谢!
[编辑]这里有一些代码非常粗略地展示了我如何从客户端进行通信。所有应用程序 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,
});