Как я могу заменить Claimsprincipal для aws cognito Oauth2 в ядре .net? - PullRequest
0 голосов
/ 30 марта 2019

Я испытываю Aws Cognito в своем основном MVC-решении asp.net.

Я регистрирую Cookie-auth в моем автозагрузке и добавляю прослушиватель на событие OnCreatingTicket для анализа JWT-токена, который я получаю при успешном выполнении.войдите как показано ниже:

        services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = "Cognito";
        })
           .AddCookie()
           .AddOAuth("Cognito", options =>
           {
               options.ClientId = Configuration["Authentication:Cognito:ClientId"];
               options.ClientSecret = Configuration["Authentication:Cognito:Secret"];
               options.CallbackPath = new PathString("/sign-in");
               options.AuthorizationEndpoint = "https://xx.auth.eu-west-1.amazoncognito.com/oauth2/authorize";
               options.TokenEndpoint = "https://xx.auth.eu-west-1.amazoncognito.com/oauth2/token";
               options.SaveTokens = true;
               options.ClaimsIssuer = "https://cognito-idp.eu-west-1.amazonaws.com/xxx";

               options.Events = new OAuthEvents
               {
                    OnCreatingTicket = OnCreatingTicket
               };
           }); 

Однако мне удалось найти только метод Principal.AddIdentity, который позволяет мне добавить новый CLaimsIdentity, но я хочу заменить текущую Identity, так как это необходимо дляAntiForgery-system ядра ядра asp.net.

Разбор jwt-токена:

    private static Task OnCreatingTicket(OAuthCreatingTicketContext context)
    {
        var handler = new JwtSecurityTokenHandler();

        var idToken = context.TokenResponse.Response["id_token"];
        var jwtToken = handler.ReadJwtToken(idToken.ToString());

        var appIdentity = new ClaimsIdentity(jwtToken.Claims);

//how to override context.Principal?
        context.Principal.AddIdentity(appIdentity);

        return Task.CompletedTask;
    }

Есть идеи, как переопределить текущий контекст. Принцип. Идентичность вместо добавления нового?

1 Ответ

0 голосов
/ 31 марта 2019

Свойство Principal в контексте является изменяемым, поэтому замените его новым.

context.Principal = new ClaimsPrincipal(appIdentity);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...