using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Http;
using Microsoft.IdentityModel.Tokens;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Syc.Authorize.JwtBearer
{
public class JwtBearerAuthenticationOptions
{
public JwtBearerAuthenticationOptions()
{
}
///
/// 加密算法,对应 SecurityAlgorithms 类中的算法
///
public virtual string Algorithms { get; set; }
///
/// 是否验证密钥
///
public virtual bool ValidateIssuerSigningKey { get; set; }
///
/// 签发方密钥
///
public virtual string SecurityKey { get; set; }
///
/// 是否验证签发方
///
public virtual bool ValidateIssuer { get; set; }
///
/// 签发方
///
public virtual string Issuer { get; set; }
///
/// 是否验证接收者
///
public virtual bool ValidateAudience { get; set; }
///
/// 接收者
///
public virtual string Audience { get; set; }
///
/// 是否验证 token 过期时间
///
public virtual bool ValidateLifetime { get; set; }
///
/// 过期时间(分钟)
///
public virtual long ExpiredTime { get; set; }
///
/// 令牌过期时间的偏移值,缓冲过期时间,总有效时间 = 过期时间 + 缓存时间,不设置的话默认是 5 分钟
///
public virtual long ClockSkew { get; set; }
///
/// token 验证参数
///
public virtual TokenValidationParameters TokenValidationParameters { get; set; }
///
/// 身份质疑,如无效token
///
///
///
public virtual Task OnChallenge(JwtBearerChallengeContext context)
{
return Task.CompletedTask;
}
///
/// 权限验证失败
///
///
///
public virtual Task OnForbidden(ForbiddenContext context)
{
return Task.CompletedTask;
}
///
/// token 过期
///
///
///
public virtual Task OnAuthenticationFailed(AuthenticationFailedContext context)
{
//Token 过期
if (context.Exception.GetType() == typeof(SecurityTokenExpiredException) && !context.Request.Headers.ContainsKey("Token-Expired"))
{
context.Request.Headers.Add("Token-Expired", "true");
}
return Task.CompletedTask;
}
}
}