Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET核心-JWT-SecurityTokenNoExpirationException_C#_Asp.net Core_Exception_Jwt - Fatal编程技术网

C# .NET核心-JWT-SecurityTokenNoExpirationException

C# .NET核心-JWT-SecurityTokenNoExpirationException,c#,asp.net-core,exception,jwt,C#,Asp.net Core,Exception,Jwt,在登录页面的上下文中,我尝试在.NETCore中构建一个Jwt令牌 中间件正在引发异常: SecurityTokenNoExpirationException异常 很确定一切都准备好了 我接着说: 以下是创建JWT的身份验证控制器部分: var tokenHandler = new JwtSecurityTokenHandler(); var key = Encoding.ASCII.GetBytes(settings.JwtSecret); var claims = new Claim[] {

登录页面的上下文中,我尝试在.NETCore中构建一个Jwt令牌

中间件正在引发异常:

SecurityTokenNoExpirationException异常

很确定一切都准备好了

我接着说:

以下是创建JWT的身份验证控制器部分:

var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes(settings.JwtSecret);
var claims = new Claim[]
{
    new Claim(ClaimTypes.Name, user.Email),
    new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
    new Claim(ClaimTypes.Role, user.RoleId.ToString()),
    // token not valid before certain date, in our case, make it valid right away
    new Claim(JwtRegisteredClaimNames.Nbf, new DateTimeOffset(DateTime.Now).ToUnixTimeMilliseconds().ToString()),
    new Claim(JwtRegisteredClaimNames.Exp, new DateTimeOffset(DateTime.Now.AddMinutes(30)).ToUnixTimeMilliseconds().ToString()),
};

var header = new JwtHeader(
        new SigningCredentials(
            new SymmetricSecurityKey(key),
            SecurityAlgorithms.HmacSha256Signature
            )
        );

var payload = new JwtPayload(claims);

var securityToken = new JwtSecurityToken(header, payload);
var handler = new JwtSecurityTokenHandler();
下面是初始化JWT中间件的startup.cs部分:

var settings = settingsSection.Get<Settings>();
var key = Encoding.ASCII.GetBytes(settings.JwtSecret);
services.AddAuthentication(x =>
{
    x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(x =>
{
    x.RequireHttpsMetadata = false;
    x.SaveToken = true;
    x.TokenValidationParameters = new TokenValidationParameters
    {
        ValidateIssuerSigningKey = true,
        IssuerSigningKey = new SymmetricSecurityKey(key),
        ValidateIssuer = false,
        ValidateAudience = false
    };
});
var settings=settingsSection.Get();
var key=Encoding.ASCII.GetBytes(settings.JwtSecret);
services.AddAuthentication(x=>
{
x、 DefaultAuthenticateScheme=JwtBearerDefaults.AuthenticationScheme;
x、 DefaultChallengeScheme=JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(x=>
{
x、 RequireHttpsMetadata=false;
x、 SaveToken=true;
x、 TokenValidationParameters=新的TokenValidationParameters
{
ValidateSuersigningKey=true,
IssuerSigningKey=新对称性安全密钥(密钥),
validateisuer=false,
ValidateAudience=false
};
});
如果你需要更多信息,请告诉我


感谢您在这方面的帮助。

JWT中的时间戳表示为秒,而不是毫秒

定义数字日期:

JSON数值,表示从UTC 1970-01-01T00:00:00Z到指定UTC日期/时间的秒数,忽略闰秒


因此,在创建声明时,请使用
ToUnixTimeSeconds()
而不是
ToUnixTimeSeconds()

我会检查它,但我意识到承载器没有被发送。。。我贴了一个有棱角的问题。。。我不能帮你回答这个问题,但我想知道为什么你没有发送令牌,却得到了这样一个特殊的例外?但是无论如何,一旦你发送令牌,你就会发现,错误的时间戳格式是下一个问题。我想你也应该在
TokenValidationParameters
中添加
ValidateLifetime=true
,我会验证你的答案