微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。