Azure B2C - не удалось получить токен в автоматическом режиме

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

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

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

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

    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));
    }

person stef    schedule 19.04.2016    source источник


Ответы (1)


Ваш кеш пуст, потому что он нигде не сохраняется. Ознакомьтесь с 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. Эта библиотека все еще находится в стадии предварительного просмотра.

person Kanishk Panwar    schedule 21.04.2016
comment
Можете ли вы принять ответ, если он вам помог. Это поможет и другим. - person Kanishk Panwar; 25.04.2016
comment
NaiveSessionCache сохраняет токен в состоянии сеанса, который, как предполагается, будет доступен в течение всего сеанса пользователя. Он используется в примерах. Разве этого недостаточно? Почему вы предпочитаете хранить в БД, а не в сеансе? У меня есть связанный вопрос Можно ли использовать NaiveSessionCache из Azure-Samples Azure Active Directory OpenId Connect - person Michael Freidgeim; 26.01.2017