Промежуточное ПО.Net Core JwtBearer с использованием Amazon Cognito

Поэтому я использую Cognito(используя amazon-javascript-sdk) в угловом приложении.net Core, и я пытаюсь проверить access_token, который я получаю от amazon, в моем ядре.net core, чтобы я мог защитить свой Web Api, Используя 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)
    };
});

Решение

Для тех, кто заинтересован, после поиска в Интернете я нашел решение. Используя openid-конфигурацию 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

1 ответ

Используя конфигурацию amazon openid, доступную здесь:

      https://cognito-idp.{region}.amazonaws.com/{UserPoolId}/.well-known/openid-configuration

вы можете использовать Configurationmanager для получения SecurityKey. вTokenValidationParametersвы можете установитьIssuerSigningKeysк ключам, которые вы получаете от менеджера конфигураций.

Эта статья также очень помогла найти решение https://developer.okta.com/blog/2018/03/23/token-authentication-aspnetcore-complete-guide .


Этот ответ был опубликован как редактирование вопроса промежуточного программного обеспечения .Net Core JwtBearer с использованием Amazon Cognito OP user3906648 под CC BY-SA 4.0.

Другие вопросы по тегам