2014-09-11 5 views
3

Представьте клиентское и сервисное приложение, зарегистрированное в Windows Azure.Как я могу выполнить автоматическую аутентификацию oauth/openid для WebAPI?

Клиент является консолью и работает без присмотра на месте (например, выполняет тесты за ночь) Услуга является сервисом WebAPI, защищенным oAuth и обычно доступным с использованием OpenID Connect, размещенного в Azure.

Как клиент может аутентифицироваться в службе БЕЗ любого взаимодействия входа пользователя (т. Е. Приложение аутентифицируется для службы с использованием ADAL .Net)?

Я попытался ADAL .Net Daemon to WebAPI sample, но она по-прежнему всплывает диалог аутентификации ...

Спасибо!

[редактировать] Вот код, чтобы показать очень примерно, как я общаюсь с клиентом. Все идентификаторы приложений и т. Д. Являются правильными.

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

Что вы используете как свою AS? Azure AD? – BenV

+0

Azure AD, да. Все работает отлично от этого сценария. – Richard

+0

[Этот парень] (http://stackoverflow.com/questions/25781752/failing-to-authenticate-using-token-acquired-with-adal) также опубликовал тот же вопрос немного после моего. От очистки Interwebs, кажется, часто встречающаяся проблема, но я не могу найти окончательного ответа. – Richard

ответ

2

EDIT: перечитывая оригинальное сообщение, я думаю, что теперь понимаю, что происходит. Вы упомянули, что у вас есть OpenId Connect в вашем приложении, и когда вы попадаете в веб-API, вы получаете HTML. Я подозреваю, что промежуточное ПО OpenId Connect запускается, когда вы попадаете в веб-API, а не в промежуточное ПО Oauth2. Если это так, я рекомендую взглянуть на 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.

+0

Спасибо, что нашли время, чтобы предоставить эту информацию. Звучит правильно, не так ли? Я сейчас нахожусь на этом «другом». Но я посмотрю, когда у меня появится такая возможность. Просто хотел поблагодарить за указатель тем временем. – Richard

+0

Вы когда-нибудь решали это? Попытка сделать то же самое с .NET Core Webapp/WebApi, и я просто вижу страницу входа! – Raj