2016-03-17 2 views
3

Я хочу создать приложение Windows Phone 8.1 с аутентификацией Azure AD B2C. В качестве основы я использовал B2C Windows Desktop/Native Client sample.ADAL 4 (экспериментальный) ведет себя по-разному для Windows Desktop/Родной и Windows Phone с B2C

Настольное приложение работает очень хорошо. В моем WP8.1 принятии бегаю в первую задачу в точке, где я хочу, чтобы получить маркер:

result = await authContext.AcquireTokenAsync(new string[] { Globals.clientId }, 
       null, Globals.clientId, new Uri(Globals.redirectUri), 
       platformParams, Globals.signInPolicy); 

В то время как я получаю хороший и блестящий маркер для настольного приложения, для приложения WP8.1 (после возвращения из WebAuthenticationBroker) я получаю только ...? code = ...... response.

Я не уверен, но мне кажется, что библиотека работает в WP8.1 своего рода OIDC model, где первый вызов идет к санкционировать и 2-ое к маркера конечной точки.

Подобрав оттуда я пытался продолжить с кодом авторизации, полученные с

var result = await authContext.AcquireTokenByAuthorizationCodeAsync(authCode, new Uri(Globals.redirectUri), 
       credApp, new string[] { "" }, Globals.signInPolicy); 

, но независимо от того, как я стараюсь передать в ClientCredential или ClientAssertion Я всегда в конечном итоге с равнины 400 Плохой запрос (подробности не возвращаются).

Кто-то, пожалуйста, сообщите мне, где я ошибаюсь, и/или назовите меня в правильном направлении.

ответ

2

В Windows Phone 8.1 используется модель продолжения, где WAB вызывает вызывающее приложение. Проверьте образец на https://github.com/Azure-Samples/active-directory-dotnet-windowsphone-8.1/, чтобы продемонстрировать поток, или вы можете прямо посмотреть https://github.com/Azure-Samples/active-directory-dotnet-windowsphone-8.1/blob/master/TodoListClient/MainPage.xaml.cs

На вашей странице вам необходимо реализовать интерфейс IWebAuthenticationContinuable. }

#region IWebAuthenticationContinuable implementation 

    // This method is automatically invoked when the application is reactivated after an authentication interaction through WebAuthenticationBroker.   
    public async void ContinueWebAuthentication(WebAuthenticationBrokerContinuationEventArgs args) 
    { 
     // pass the authentication interaction results to ADAL, which will conclude the token acquisition operation and invoke the callback specified in AcquireTokenAndContinue. 
     await authContext.ContinueAcquireTokenAsync(args); 
    } 
    #endregion 

---------------------------------------- --------------------------

UPDATE

Я создал новое приложение для Windows Phone и ссылка Адал v4. Я проверил, что модель продолжения не относится к v4. Он используется только ADAL v2. Убедитесь, что вы используете adal-v4. я все еще должен был добавить следующий код

protected override void OnActivated(IActivatedEventArgs args) 
    { 

     if (args is IWebAuthenticationBrokerContinuationEventArgs) 
     { 
      Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory.WebAuthenticationBrokerContinuationHelper.SetWebAuthenticationBrokerContinuationEventArgs(args as IWebAuthenticationBrokerContinuationEventArgs); 
     } 

     base.OnActivated(args); 
    } 

Это возобновит процесс получения маркера и возвращает маркер доступа

+0

Спасибо. Я знаю об этом, и я реализовал продолжение, как и для обычного Azure AD. Дело в том, что при возврате из продолжения AuthenticationResult отличается от приложения Desktop. –

+0

Вы правы, что он работает в OIDC-ish. Это происходит из-за того, что код на рабочем столе управляет веб-просмотром и способен выкупить код auth, чтобы получить маркер доступа в одном вызове API (приобретаетсяToken). В случае Windows-телефона это двухэтапный подход, потому что WAB просто возвращает код auth обратно разработчику, но требует дополнительной обработки для получения фактического токена, следовательно, продолжения. Но как только вы получите результат от ContinueAcquireTokenAsync, он должен содержать токен доступа, как и вызов на рабочем столе. –

+0

Хорошо, это имеет смысл ... Я попробую и дам обновление –

1

я создал полный ходовой образец Windows Phone 8.1 приложение с аутентификацией Azure AD B2C here...

Результаты (по сравнению с ADAL v2 аутентификации Azure AD):

  • ContinuationManager не нужен - это покрывается SetWebAuthenticationBrokerContinuationEventArgs в ADAL v4
  • с этим подходом код продолжает выполнение сразу после AcquireTokenAsync
+0

Кай, благодарю вас за публикацию примера для сообщества. –