首页 文章

如何对WebAPI执行无人值守的oauth / openid身份验证?

提问于
浏览
3

想象一下在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 回答

相关问题