.net核心中的JWT-TokenValidationParameters中的'ValidIssuer'和'ValidAudience'是否需要匹配生成的令牌?

时间:2019-05-06 19:16:36

标签: asp.net-core .net-core jwt

我试图在我的.net core 2.1应用程序中设置和理解JWT,但有一部分使我感到困惑。

我的startup.cs中有以下设置

services
    .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.RequireHttpsMetadata = false;
        options.SaveToken = true;
        options.ClaimsIssuer = Configuration["Authentication:JwtIssuer"];
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidIssuer = "John",
            ValidateAudience = true,
            ValidAudience = "Dave",
            ValidateIssuerSigningKey = true,
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes
                (Configuration["Authentication:JwtKey"])),
                RequireExpirationTime = true,
                ValidateLifetime = true,
                ClockSkew = TimeSpan.Zero
        };
    });

我特意为ValidIssuerValidAudience设置了怪异的值。

然后我的代币生成如下...

var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Authentication:JwtKey"]));          
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);          
var expires = DateTime.Now.AddDays(Convert.ToDouble(_configuration["Authentication:JwtExpireDays"]));

var token = new JwtSecurityToken(
    issuer: _configuration["Authentication:JwtIssuer"],
    audience: _configuration["Authentication:JwtAudience"], 
    claims: claims, 
    expires: expires, 
    signingCredentials: creds);

return new TokenViewModel
{
    AccessToken = new JwtSecurityTokenHandler().WriteToken(token),
    AccessTokenExpiration = expires,
    FirstName = user.FirstName,
    LastName = user.LastName
};

在这里,我将issuer文件中的audienceappsettings.json设置为相应的值。

我认为我的ValidIssuer中的ValidAudiencestartup.cs需要与我生成的令牌中的issueraudience相匹配,但这并没有。似乎是这样。如果提供了令牌,则使用[Authorize]到端点的调用将按预期工作。

为什么它仍然起作用?难道不是要检查正确的发行者和受众详细信息吗?

编辑

我的令牌端点生成的示例令牌...

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJzdHVAcmF0Y2xpZmZlLmlvIiwianRpIjoiZWQyNmU0MjgtNjA3Yy00ZjZlLTg3ZjUtNjM1ZTU3MWQzNzQyIiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvbmFtZWlkZW50aWZpZXIiOiIxIiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvbmFtZSI6InN0dUByYXRjbGlmZmUuaW8iLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvY2xhaW1zL3JvbGUiOiJBZG1pbiIsImV4cCI6MTU1OTgzNDU2NiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo1MDAwIiwiYXVkIjoiaHR0cDovL2xvY2FsaG9zdDo1MDAwIn0.CES0g8UCC8LArDkd8Q4s4a6mhXbkZVGiy3-hJ2Z0IqI

已解码的有效载荷如下...

{
  "sub": "stu@ratcliffe.io",
  "jti": "ed26e428-607c-4f6e-87f5-635e571d3742",
  "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier": "1",
  "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name": "stu@ratcliffe.io",
  "http://schemas.microsoft.com/ws/2008/06/identity/claims/role": "Admin",
  "exp": 1559834566,
  "iss": "http://localhost:5000",
  "aud": "http://localhost:5000"
}

即使我的发行人和令牌中的 http://localhost:5000 的听众与我的 John 的发行人不匹配,并且使用此令牌查询授权端点也没有问题 startup.cs

Dave 的受众

enter image description here

0 个答案:

没有答案