Так что я использую Cognito (использующий amazon-javascript-sdk) в угловом приложении .net Core, и я пытаюсь проверить access_token, который я получаю от amazon в моем .net ядре, чтобы я мог защититьмой веб-интерфейс.Используя Amazon Cognito JWKS, я могу проверить access_token и, следовательно, разрешить / запретить доступ к моему API.Дело в том, что теперь у меня есть ключи JWK, жестко запрограммированные в моем файле startup.cs.Что я понимаю из JWKS, так это то, что эти ключи могут вращаться (не обнаружил, если амазонка делает это), поэтому я хотел бы как-то сказать своему промежуточному программному обеспечению получить ключи от конечной точки.Я читал кое-что о документах обнаружения и других вещах, но не могу найти ничего о том, как настроить промежуточное программное обеспечение для этого автоматически.
Для OpenId вы можете использовать MetadataAddress, чтобы указать https://cognito -idp . {awsregion} .amazonaws.com / {userPool} /. хорошо известная / openid-configuration, и она получит всю необходимую конфигурацию.Я чувствую, что нечто подобное должно существовать для IssuerSigningKey (JWK), если вы используете промежуточное ПО JwtBearer.Вместо того, чтобы устанавливать жестко закодированный ключ, я ожидаю указать на URL-адрес JWK, где промежуточное ПО найдет ключи и сделает это волшебным образом.JWKS также содержит несколько ключей, поэтому я ожидаю, что промежуточное ПО сам определит, какой ключ использовать.
Соответствующий код:
services.AddAuthentication(options =>
{
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(jwt =>
{
jwt.TokenValidationParameters = new TokenValidationParameters
{
IssuerSigningKey = MagicFunction("hardcodedRSAModules","hardcodedRSA")
ValidIssuer = "https://cognito-idp.us-east-2.amazonaws.com/{userpool}",
ValidateIssuerSigningKey = true,
ValidateIssuer = true,
ValidateLifetime = true,
ValidateAudience = false,
ClockSkew = TimeSpan.FromMinutes(0)
};
});
Решение
Для тех, кто заинтересован, после поиска в Интернете я нашел решение.Используя открытую конфигурацию amazon, доступную здесь: https://cognito -idp . {Region} .amazonaws.com / {UserPoolId} /. Хорошо известная / openid-configuration, вы можете использовать Configurationmanager для полученияSecurityKey годов.В TokenValidationParameters вы можете установить IssuerSigningKeys для ключей, которые вы получаете из менеджера конфигурации.Эта статья также была очень полезна для поиска решения https://developer.okta.com/blog/2018/03/23/token-authentication-aspnetcore-complete-guide