问题描述
环境
- AWS Cognito用户池
- OIDC身份验证
- ASP.NET Core身份模型身份验证
问题陈述
我们有一个从Cognito获得的经过身份验证的令牌(访问,刷新,ID)。但是,当我们发送相同的令牌以进行用户检查时,它会成功获得已认证,但是授权会失败。
代码和配置
服务器
services.AddAuthorization(options =>
{
options.AddPolicy(AuthenticationConfig.DefaultPolicy,policy =>
{
var defaultPolicy =
authConfig.Policies.FirstOrDefault(x => x.Name == AuthenticationConfig.DefaultPolicy);
foreach (var claims in defaultPolicy.Claim)
{
policy.RequireClaim(claims.Key,claims.Value);
}
});
});
services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
.AddIdentityServerAuthentication(options =>
{
options.Authority = authConfig.Authority;
options.SupportedTokens = SupportedTokens.Jwt;
options.IntrospectiondiscoveryPolicy = new discoveryPolicy()
{
EndpointValidationExcludeList = {"registration_endpoint"}
};
});
Config
"AuthenticationConfig": {
"Authority": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxxx","Policies": [
{
"Name": "Default","Claim": {
"MyAppNameGoesHere": [
"MyClientNameGoesHere"
]
}
}
]
}
客户
var token = $"Bearer {_credentialFileHandler.GetToken(CredentialFileHandler.Accesstoken)}";
var entries = new Metadata
{
{"api-version",GetType().Assembly.GetName().Version.ToString()},{"Authorization",token},};
if (Metadata != null)
{
foreach (var entry in Metadata)
{
entries.Add($"app-{entry.Key}",entry.Value);
}
}
_callInvoker = _channel.Intercept(m =>
{
foreach (var entry in entries)
{
m.Add(entry);
}
return m;
});
AWS上的Cognito配置
结果
身份验证成功进行,并且登录用户的登录名(打开IdentityModelEventSource.ShowPII = true;
时)。但是,授权仍然失败。
调试尝试
可以根据需要提供任何其他代码/配置等
更新...更多配置
所传递的访问令牌中的声明为“ MyAppNameGoesHere \ MyClientNameGoesHere”,这是Cognito的资源服务器配置返回的。应用服务器正在请求声明,如上面的身份验证配置中所述。 让我知道这些值在逻辑上是否匹配,或者我在某处公然错误。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)