ASP.NET Основные гибридные страницы Razor / приложение React SPA с аутентификацией cognito

#asp.net #razor #amazon-cognito #aws-amplify

#asp.net #razor #amazon-cognito #aws-amplify

Вопрос:

У меня есть 2 приложения:

-Приложение 1, которое использует страницы Razor со встроенным промежуточным программным обеспечением Cognito Identity для аутентификации

-Приложение App2, созданное с использованием шаблона .net core react SPA, использует aws-amplify для аутентификации в клиенте react и выполняет вызовы API к серверному API .NET Core с использованием токена JWT bearer.

Оба работают просто отлично.

Сейчас я пытаюсь перенести App1 на модель .net core / SPA, аналогичную App2.

Я смог добавить клиентское приложение с приложением react и повторно использовать большую часть кода aws-amplify из App2 для аутентификации.

Чего я хотел бы добиться — чтобы все маршруты на страницах Razor (с ограниченным доступом) были доступны, если пользователь вошел в систему через aws-amplify в клиенте. Я могу добиться этого просто отлично для конечных точек API с помощью аутентификации токена на предъявителя JWT. Однако попытка получить доступ к страницам Razor не работает, похоже, что, хотя мое приложение настроено на использование JWT, страницы Razor требуют другого типа аутентификации?

Для справки — вот как я использую токен-носитель cognito JWT для авторизации доступа к моим конечным точкам API:

 private void Auth(IServiceCollection services)
    {
        JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();

        var userPoolId = Configuration["Cognito:UserPoolId"];
        var userPoolClientId = Configuration["Cognito:UserPoolClientId"];

        services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    IssuerSigningKeyResolver = (s, securityToken, identifier, parameters) =>
                    {
                        var json = new WebClient().DownloadString(
                            parameters.ValidIssuer   "/.well-known/jwks.json");
                        var keys = JsonConvert.DeserializeObject<JsonWebKeySet>(json).Keys;
                        return keys;
                    },

                    ValidIssuer = $"https://cognito-idp.my-region.amazonaws.com/{userPoolId}",
                    ValidateIssuerSigningKey = true,
                    ValidateIssuer = true,
                    ValidateLifetime = true,
                    ValidAudience = userPoolClientId,
                    ValidateAudience = true
                };
            });

        services.AddAuthorization(options =>
        {
            options.AddPolicy("xx", policy => policy.RequireClaim("cognito:groups", "xx"));
            options.AddPolicy("yy", policy => policy.RequireClaim("cognito:groups", "yy"));
        });
    }
  

Тогда мой вопрос — как я могу использовать аутентификацию cognito, чтобы позволить моему пользователю, который вошел в систему через AWS Amplify в клиенте, также получить доступ к защищенным страницам Razor?

Спасибо!