2016-04-19 2 views
1

Я создаю приложение с ASP.NET MVC и WebAPI, используя этот шаблон: Azure AD B2C WebApp/WepAPI. Я настроил свой Azure B2C AD через файлы web.config, и когда я нажимаю «Войти», я вижу своих поставщиков удостоверений. Вход в систему работает до сих пор (я вижу свое имя пользователя в правом верхнем углу), и я могу выполнить «Список дел» - «Ввод».Azure B2C - не удалось получить токен молча

Но как только я остановлю отладчик и перезапущу приложение, нажав F5, я получаю сообщение об ошибке, когда я нажимаю «Список дел» - снова.

Не удалось получить токен молча. Вызов метода AcquireToken текст ->Code

Это происходит, вызывает пользователь еще проверку подлинности, но NaiveSessionCache пуст после приложения перезагружается. Возможное решение было бы, чтобы сохранить маркер в OnAuthorizationCodeReceived Handler, но я выгляжу немного странно для меня

private async Task OnAuthorizationCodeReceived(AuthorizationCodeReceivedNotification notification) 
    { 
     string userObjectID = notification.AuthenticationTicket.Identity.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value; 
     string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant, string.Empty, string.Empty); 
     ClientCredential credential = new ClientCredential(clientId, clientSecret); 

     string mostRecentPolicy = notification.AuthenticationTicket.Identity.FindFirst(Startup.AcrClaimType).Value; 
     AuthenticationContext authContext = new AuthenticationContext(authority); 

     AuthenticationResult result = await authContext.AcquireTokenByAuthorizationCodeAsync(notification.Code, new Uri(redirectUri), credential, new string[] { clientId }, mostRecentPolicy); 

     // Store token in ClaimsIdentity 
     notification.AuthenticationTicket.Identity.AddClaim(new System.Security.Claims.Claim("Token", result.Token)); 
    } 

ответ

2

Ваш кэш пуст, потому что он нигде не сохраняется. Выезд http://www.cloudidentity.com/blog/2014/07/09/the-new-token-cache-in-adal-v2/. Найдите EFADALTokenCache, и вы найдете реализацию, которая поможет вам сохранить кеш в каком-либо хранилище.

Azure B2C будет поддерживаться только через новую библиотеку под названием MSAL, доступную по адресу https://www.nuget.org/packages/Microsoft.Identity.Client. Эта библиотека все еще находится в предварительном просмотре.

+0

вы можете принять ответ, если это вам помогло. Это также поможет другим. –

+0

NaiveSessionCache сохраняют токен в состоянии сеанса, который предположительно будет доступен в течение всего сеанса пользователя. Он используется в образцах. Этого недостаточно? Почему вы предпочитаете хранить в БД, а не в сеансе? У меня есть связанный вопрос [Можно ли использовать NaiveSessionCache от Azure-Samples Azure Active Directory OpenId Connect] (// stackoverflow.com/q/41864737) –