.Net Core JwtBearer 中间件使用 Amazon Cognito

bla*_*aap 7 .net jwt amazon-cognito .net-core jwk

所以我在 .net Core angular 应用程序中使用 Cognito(使用 amazon-javascript-sdk),我试图验证我在 .net core 后端从亚马逊获得的 access_token,以便我可以保护我的 Web Api . 使用 Amazon cognito JWKS 我能够验证 access_token 并因此允许/拒绝访问我的 api。问题是我现在在我的 startup.cs 中硬编码了 JWK 密钥。我从 JWKS 了解到的是,这些密钥可以轮换(没有发现亚马逊是否这样做),所以我想以某种方式告诉我的中间件从端点获取密钥。我阅读了一些有关发现文档和其他内容的内容,但找不到有关如何配置中间件以自动执行此操作的任何内容。

对于 OpenId,您可以使用 MetadataAddress 指向https://cognito-idp .{awsregion}.amazonaws.com/{userPool}/.well-known/openid-configuration,这将获得所有必要的配置。如果您使用 JwtBearer 中间件,我觉得 IssuerSigningKey(JWK) 应该存在类似的东西。我希望指向 JWK url,而不是设置一个硬编码的密钥,中间件将在其中找到密钥并执行它的魔法。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)
    };
});
Run Code Online (Sandbox Code Playgroud)

解决方案

对于任何感兴趣的人,在互联网上搜索更多信息后,我找到了解决方案。使用亚马逊 openid-configuration,可在此处获得: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

vin*_*zee 0

使用亚马逊 openid 配置,可在此处获取:

https://cognito-idp.{region}.amazonaws.com/{UserPoolId}/.well-known/openid-configuration
Run Code Online (Sandbox Code Playgroud)

您可以使用 Configurationmanager 来获取 SecurityKey。在 中,TokenValidationParameters您可以将 设为IssuerSigningKeys从配置管理器获得的密钥。

这篇文章对于寻找解决方案也非常有帮助https://developer.okta.com/blog/2018/03/23/token-authentication-aspnetcore-complete-guide


此答案是由 OP blaataap根据 CC BY-SA 4.0对问题.Net Core JwtBearer middleware using Amazon Cognito 的编辑发布的。