#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?
Спасибо!