2015-10-05 4 views
0

У меня есть служба WCF, которая должна в конечном итоге получить токен, чтобы поговорить с веб-службой api, размещенной в лазурной. Активный каталог на локальном сервере синхронизируется с нашей лазурной учетной записью.Код авторизации Active Directory Azure

Изначально у меня была игра в приложении выиграть формы и получил маркер успешно используя следующие:

AuthenticationResult authResult = authContext.AcquireToken(apiResourceId, clientId, redirectUri); 

Это хотя выскочило диалоговое окно входа в систему, так не много пользы для обслуживания окон. Затем я исследовал использование AcquireTokenSilent(). Это, однако, продолжало бросать исключение, говоря мне, чтобы я позвонил в компанию AcquireToken так, чтобы вернуться к квадрату 1.

Следующим портом захода было посмотреть AcquireTokenByAuthorizationCode(). Моя проблема заключается в том, как получить код авторизации, который является первым параметром.

Я пробовал:

var url = authContext.GetAuthorizationRequestURL(apiResourceId, clientId, redirectUri, UserIdentifier.AnyUser, string.Empty); 

HttpClient hc = new HttpClient(); 
HttpResponseMessage hrm = hc.GetAsync(url).Result; 

Это хотя просто возвращает HTML-страницу показ я думаю майкрософт страницу входа в систему. Он, конечно, не содержит никакого кода.

Любые идеи о том, что я делаю неправильно?

ответ

1

AcquireTokenSilent работает только в том случае, если у вас уже есть токены в кеше, что не так в вашем сценарии. Код AcquireTokenByAuthorizationCode предназначен для судебного разбирательства на стороне сервера. Основные способы, по которым вы можете получить токен, не выставляя диалоговое окно на клиенте, показаны в https://github.com/Azure-Samples/active-directory-dotnet-native-headless, но существуют важные ограничения. Если они хорошо работают в вашем сценарии, в противном случае вы можете подумать о создании постоянного кеша, загрузив его, выполнив одну интерактивную проверку подлинности, а затем продолжайте использовать тот же кеш из своей службы через AcquireTokenSilent. Кэш-память обновляется до 90 дней, пока вы используете ее не реже одного раза в 14 дней.

+0

Будет ли это означать, что каждые 90 дней мне нужно выполнить другую интерактивную проверку подлинности? – DasDave

+0

сегодня, да. Тем не менее, мы работаем над механизмами контроля продолжительности токенов обновления, которые позволят вам продлить продолжительность произвольно. Однако ETA для этой функции на данный момент. – vibronet

+0

Образец отлично работает! О каких ограничениях вы говорите? – DasDave