web-dev-qa-db-ja.com

ASP.NET CoreおよびJWTトークンの有効期間

_ASP.NET Core 2.1.1_を利用します

有効なのは、bothClockSkew-in Startup.csand_JwtSecurityTokenHandler.TokenLifetimeInMinutes_-コントローラ内

例えば:

_services
  .AddJwtBearer(x =>
  {
      ...
      x.TokenValidationParameters = new TokenValidationParameters()
      {
         ClockSkew = TimeSpan.FromMinutes(90),
         ...
_

プラス

_...
public async Task<AuthenticateOutput> Authenticate([FromBody] AuthenticateInput input)
{
   var tokenHandler = new JwtSecurityTokenHandler();
   tokenHandler.TokenLifetimeInMinutes = (int)TimeSpan.FromMinutes(90).TotalMinutes;
   ...
_

tokenHandler.TokenLifetimeInMinutes = (int)TimeSpan.FromMinutes(90).TotalMinutes;部分を削除すると、デフォルトの有効期限が使用されます。

_tokenHandler.TokenLifetimeInMinutes_はstill冗長であり、有効期限を正しく設定する方法の概念を誤解しているように思えます。

また、有効期限の要求-new Claim(ClaimTypes.Expiration, ...)-を追加しようとしましたが、それほど効果はありませんでした。

6
Alex Herman

ClockSkewプロパティは有効期限そのものではなく、 クロックスキュー を補正します。

トークンの有効期限を設定するには、トークンの作成時に指定する必要があります。

new JwtSecurityToken(
                ...
                expires: DateTime.UtcNow.AddMinutes(90),
                ....);

次のコードはトークン付きの文字列を提供します:

var token = new JwtSecurityToken() { /* setup your token setting here*/ }
var tokenString = new JwtSecurityTokenHandler().WriteToken(token);
17
Alex Riabov