проверка токена с использованием параметров конфигурации OAUTH2 Cognito в веб-интерфейсе ядра .net - PullRequest
0 голосов
/ 27 февраля 2019

Я использую Web API в .net core 2.1, и мне нужно проверить входящий токен JWT, который хранится во входящих запросах.Маркер был сгенерирован из IDP OAUTH 2 и вставлен моим клиентом в свои запросы к моему веб-API.Конфигурация OpenID, которую я могу получить из cognito, выглядит следующим образом:

{
    "authorization_endpoint": "https://xxx.xxx.xxx.amazoncognito.com/oauth2/authorize",
    "id_token_signing_alg_values_supported": ["RS256"],
    "issuer": "https://cognito-idp.eu-west-1.amazonaws.com/xxx",
    "jwks_uri": "https://cognito-idp.eu-west-1.amazonaws.com/xxxxxx/.well-known/jwks.json",
    "response_types_supported": ["code", "token", "token id_token"],
    "scopes_supported": ["openid", "email", "phone", "profile"],
    "subject_types_supported": ["public"],
    "token_endpoint": "https://xxxxxxx.auth.eu-west-1.amazoncognito.com/oauth2/token",
    "token_endpoint_auth_methods_supported": ["client_secret_basic", "client_secret_post"],
    "userinfo_endpoint": "https://xxxxxxxx.auth.eu-west-1.amazoncognito.com/oauth2/userInfo"
}

Я бы хотел использовать стандартный стандартный веб-API .net для управления этой задачей, реализуя в файле startup.cs следующее:

 services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
     {
         options.TokenValidationParameters = new TokenValidationParameters
         {
             // Clock skew compensates for server time drift.
             // We recommend 5 minutes or less:
             ClockSkew = TimeSpan.FromMinutes(5),
             // Specify the key used to sign the token:
             IssuerSigningKey = signingKey,
             RequireSignedTokens = true,
             // Ensure the token hasn't expired:
             RequireExpirationTime = true,
             ValidateLifetime = true,
             // Ensure the token audience matches our audience value (default true):
             ValidateAudience = true,
             ValidAudience = "api://default",
             // Ensure the token was issued by a trusted authorization server (default true):
             ValidateIssuer = true,
             ValidIssuer = "???????"
         };

Как я могу использовать / сопоставлять параметры congnito в моих параметрах проверки токена Web API?В частности, как я могу загрузить IssuerSigningKey, ValidIssuer и ValidAudience?

1 Ответ

0 голосов
/ 01 марта 2019

По сути, я решил проверить проверку подписи токена, вставив следующее в метод «ConfigureServices» в «Startup.cs»

...

IConfigurationManager<OpenIdConnectConfiguration> configurationManager = new ConfigurationManager<OpenIdConnectConfiguration>("*PutHereCognitoOpenIdWellKnownConfigurationURL*", new OpenIdConnectConfigurationRetriever());          
Task<OpenIdConnectConfiguration> t = configurationManager.GetConfigurationAsync(CancellationToken.None);
t.Wait();
OpenIdConnectConfiguration openIdConfig = t.Result;

....

предыдущие операторы вернули мне IssuerSigningKeys, поэтому я также вставил следующее:

...

  services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddJwtBearer(options =>
                {
                    options.TokenValidationParameters = new TokenValidationParameters
                    {
                        RequireExpirationTime = true,
                        RequireSignedTokens = true,
                        ValidateAudience = false,
                        ValidateIssuer = false,
                        ValidateLifetime = false,
                        IssuerSigningKeys = openIdConfig.SigningKeys
                    };

                });

...

, а затемЯ вызвал "app.UseAuthentication ();"внутри метода Configure.Наконец, я помещаю украшение [Authorize] перед каждым задействованным методом Web API

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...