AWS Cognito身份验证成功,但.NET Core的授权失败

问题描述

环境

  • 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配置

Cognito permission

OAuth setup

结果

身份验证成功进行,并且登录用户登录名(打开IdentityModelEventSource.ShowPII = true;时)。但是,授权仍然失败。

调试尝试

可以根据需要提供任何其他代码/配置等

更新...更多配置

所传递的访问令牌中的声明为“ MyAppNameGoesHere \ MyClientNameGoesHere”,这是Cognito的资源服务器配置返回的。应用服务器正在请求声明,如上面的身份验证配置中所述。 让我知道这些值在逻辑上是否匹配,或者我在某处公然错误

Cloudwatch日志

Cloudwatch log indicating failed authorization

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)