啊鑫
4 天以前 eb65436c2312821e3e513ab9ada41dd486d6d7cf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Authorization;
using Microsoft.AspNetCore.Mvc.Filters;
 
namespace Gs.HostIIS;
 
public class ApiAuthorizeAttribute : Attribute, IAuthorizationFilter
{
 
    /// <summary>
    /// 用户令牌验证
    /// </summary>
    /// <param name="context"></param>
    public void OnAuthorization(AuthorizationFilterContext context)
    {
        var token = context.HttpContext.Request.Headers["token"]
            .FirstOrDefault()?.Split(' ').Last();
        if (string.IsNullOrEmpty(token)) token = "";
        if (HasAllowAnonymous(context) == false && token.Length < 5)
            context.Result = new JsonResult(new { msg = "你无权做这些", code = 401 })
            {
                StatusCode = StatusCodes.Status401Unauthorized
            };
    }
 
    private static bool HasAllowAnonymous(AuthorizationFilterContext context)
    {
        var filters = context.Filters;
        if (filters.OfType<IAllowAnonymousFilter>().Any()) return true;
        var endpoint = context.HttpContext.GetEndpoint();
        return endpoint?.Metadata?.GetMetadata<IAllowAnonymous>() != null;
    }
}