using Elight.Utility.Enum; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using System.ComponentModel; using System.Net.Http.Headers; using System.Security.Claims; using System.Text; using System.Text.Encodings.Web; namespace Elight.Utility { /// /// 响应认证处理器 /// /// Author:mxg /// CreatedTimed:2022-05-15 10:08 PM public class ResponseAuthenticationHandler : AuthenticationHandler { #region Identity public ResponseAuthenticationHandler(IOptionsMonitor options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock ) : base(options, logger, encoder, clock) { } #endregion Identity /// /// /// /// /// protected override Task HandleAuthenticateAsync() => throw new NotImplementedException(); /// /// HandleChallengeAsync /// /// /// protected override async Task HandleChallengeAsync(AuthenticationProperties properties) { Response.ContentType = "application/json"; Response.StatusCode = StatusCodes.Status401Unauthorized; await Response.WriteAsync(JsonConvert.SerializeObject( new ResponseStatusData { Code = CustomizedStatusCodeEnum.Status401Unauthorized, Msg = CustomizedStatusCodeEnum.Status401Unauthorized.ToDescription() }, new JsonSerializerSettings() { ContractResolver = new CamelCasePropertyNamesContractResolver() } )); } /// /// HandleForbiddenAsync /// /// /// protected override async Task HandleForbiddenAsync(AuthenticationProperties properties) { Response.ContentType = "application/json"; Response.StatusCode = StatusCodes.Status403Forbidden; await Response.WriteAsync(JsonConvert.SerializeObject( new ResponseStatusData { Code = CustomizedStatusCodeEnum.Status403Forbidden, Msg = CustomizedStatusCodeEnum.Status403Forbidden.ToDescription() }, new JsonSerializerSettings() { ContractResolver = new CamelCasePropertyNamesContractResolver() } )); } } /// /// /// public class ResponseStatusData { /// /// 状态码枚举 (0:操作失败 1:操作成功 401:未登录 403:权限不足 404:资源不存在 500:系统内部错误) /// /// public CustomizedStatusCodeEnum Code { get; set; } = CustomizedStatusCodeEnum.Status1Ok; /// /// /// public string? Msg { get; set; } } }