使用Amazon Cognito的.Net Core JwtBearer中间件

时间:2018-10-23 09:29:34

标签: .net .net-core jwt amazon-cognito jwk

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

对于OpenId,您可以使用MetadataAddress指向https://cognito-idp。{awsregion} .amazonaws.com / {userPool} /。众所周知/ 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)
    };
});

解决方案

对于感兴趣的任何人,在互联网上搜索了更多内容后,我找到了解决方案。使用以下位置提供的Amazon openid配置:https://cognito-idp。{region} .amazonaws.com / {UserPoolId} /。众所周知/ openid配置,您可以使用Configurationmanager来获取SecurityKey。在TokenValidationParameters中,可以将IssuerSigningKeys设置为从configurationmanager获取的密钥。本文对找到解决方法https://developer.okta.com/blog/2018/03/23/token-authentication-aspnetcore-complete-guide

也非常有帮助

0 个答案:

没有答案