Промежуточное ПО .Net Core JwtBearer с использованием Amazon Cognito - PullRequest
0 голосов
/ 23 октября 2018

Так что я использую 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

...