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

时间:2014-09-11 01:38:35

标签: azure adal

想象一下在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,
    });

1 个答案:

答案 0 :(得分:2)

编辑:重新阅读原帖,我想我现在明白了发生了什么。您提到您的应用程序上有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 诉