using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
using System.Text;
namespace AI.Api.WebCore
{
public static class AuthenticationServiceExtensions
{
///
/// 添加认证和授权
///
/// 服务集合
///
public static IServiceCollection AddAuth(this IServiceCollection services, string issuer, string audience, string secretKey)
{
services.AddAuthentication(options =>
{
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuer = true, //是否验证Issuer
ValidIssuer = issuer, //发行人Issuer
ValidateAudience = true, //是否验证Audience
ValidAudience = audience, //订阅人Audience
ValidateIssuerSigningKey = true, //是否验证SecurityKey
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey)), //SecurityKey
ValidateLifetime = true, //是否验证失效时间
ClockSkew = TimeSpan.FromSeconds(30), //过期时间容错值,解决服务器端时间不同步问题(秒)
RequireExpirationTime = true,
};
});
return services;
//services.AddAuthorization(options =>
//{
// options.AddPolicy(Constant.Policy.FreePolicyName,
// policy => policy.RequireClaim(Constant.Auth.PermissionsKey, Constant.Auth.FreeClaimValue, Constant.Auth.VipClaimValue));
// options.AddPolicy(Constant.Policy.VipPolicyName,
// policy => policy.RequireClaim(Constant.Auth.PermissionsKey, Constant.Auth.VipClaimValue));
//});
}
}
}