代码之家  ›  专栏  ›  技术社区  ›  GlennS

为什么amazoncognito不在其访问令牌中返回一个观众字段?

  •  1
  • GlennS  · 技术社区  · 6 年前

    当amazoncognito发布访问令牌时,它不包括 aud 现场。

    documentation for Cognito tokens ,的 MBaud 为id标记列出字段(始终设置为与相同的值 client_id ),但不适用于访问令牌。

    这个 relevant section of the JWT specification 说:

    如果处理索赔的委托人在提出该索赔时没有在“澳元”索赔中注明自己的价值,则必须拒绝JWT。

    所以,这里发生了什么。谁说的对?这是安全问题吗?

    我注意到 iss 令牌的部分是特定于我的用户池的,不能被篡改,因为它是由Amazon签名的,所以我认为我应该是安全的

    1 回复  |  直到 6 年前
        1
  •  7
  •   thomasmichaelwallace    4 年前

    从我对RFC的阅读来看,我并不认为AWS做了什么错事,特别是(请注意我的emphisis):

    如果处理索赔的委托人没有用“澳元”索赔中的值标识自己 当此声明存在时 ,则必须拒绝JWT。

    此声明的用途是 .

    我相信,这意味着AWS很好,因为它只是在访问令牌的情况下忽略了声明,但是 通过将其设置为 client_id 当它在id令牌上声明时。

    对受众进行编码和强化;在这种情况下,当您针对AWS的api使用它时,它将强制您只接收它所针对的客户机id/作用域上的可用资源。

        2
  •  1
  •   Sp3ct3R    5 年前
        3
  •  0
  •   Yang Zhang    4 年前

    不起作用 .

              services
              .AddAuthentication(options => {
                    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
                })
                .AddJwtBearer(options => 
                {
                    options.Audience = "Client ID";
                    options.Authority = "https://cognito-idp.ap-southeast-2.amazonaws.com/USERPOOLID";
                    options.RequireHttpsMetadata = false;
    
                });
    

    临时解决方法不是验证受众:

    services
                .AddAuthentication(options => {
                    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
                })
                .AddJwtBearer(options => 
                {
                    // AWS cognito jwt token does not have aud included so that we cannot validate audience.
                    // options.Audience = "Client ID";
                    options.TokenValidationParameters = new TokenValidationParameters
                    {
                        ValidateAudience = false
                    };
                    options.Authority = "https://cognito-idp.ap-southeast-2.amazonaws.com/USERPOOLID";
                    options.RequireHttpsMetadata = false;
    
                });