所以我在.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
也非常有帮助