Как обновить Claim.Principal после входа пользователя в Azure B2C - PullRequest
0 голосов
/ 10 октября 2018

В настоящее время у меня есть проект, который пользователь B2C Azure для входа в систему.В лазури я использую 3 поля таможенных int, которые содержат результат выбора в каком-либо dropdownList.после входа в систему в моем HOME-контроллере я могу прочитать значение настраиваемого поля в моей самореализации по утверждению следующим образом:

   System.Security.Claims.Claim claim = ClaimsPrincipal.Current.Claims.Where(c => c.Type == "extension_RegistrationComplete").SingleOrDefault();
    if (claim != null)
          retour = Convert.ToBoolean(claim.Value);

Так что я могу проверить, все ли настраиваемые поля заполнены, прежде чем продолжить.Если RegistrationComplete имеет значение false, я перенаправляю на страницу формы Step2 с просьбой выбрать параметры в раскрывающемся списке.Затем я сохраняю его в Azure с помощью API-интерфейса B2C.Но локальный ClaimsPrincipal не имеет обновления, поэтому пользователь застрял в цикле, потому что локальный RegistrationConplete всегда ложен.

Как мы можем обновить ClaimsPrincipal без повторной регистрации пользователя?В настоящее время я регистрирую пользователя с

HttpContext.GetOwinContext().Authentication.Challenge(authenticationProperties);

Спасибо.

Наконец, я использую этот код:

var Identity = HttpContext.User.Identity as ClaimsIdentity;
Identity.RemoveClaim(Identity.FindFirst("AnnounceCount"));
Identity.AddClaim(new Claim("AnnounceCount", "Updated Value"));
var authenticationManager = 
System.Web.HttpContext.Current.GetOwinContext().Authentication;
authenticationManager.AuthenticationResponseGrant = new 
AuthenticationResponseGrant(new ClaimsPrincipal(Identity), new 
AuthenticationProperties() { IsPersistent = true });

1 Ответ

0 голосов
/ 10 октября 2018

Я не уверен, какой фреймворк вы используете, но я делал это раньше, обрабатывая SecurityTokenValidated в IAppBuilder.UseWindowsAzureActiveDirectoryBearerAuthentication

public void ConfigureAuth(IAppBuilder app)
{
    app.UseWindowsAzureActiveDirectoryBearerAuthentication(
        new WindowsAzureActiveDirectoryBearerAuthenticationOptions
        {
            SecurityTokenValidated = context =>{
                 //some stuff
                 Claim newClaim = new Claim("something", "special");
                 context.AuthenticationTicket.Identity.AddClaim(newClaim);
            }
        });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...