首页 > 解决方案 > 如何从自定义属性返回未经授权的结果?

问题描述

我正在尝试使用 HotChocolate 实现自定义授权属性。

到目前为止我所拥有的是这个

namespace GraphQL.Attributes
{
    public class AuthorizeAttribute : ObjectFieldDescriptorAttribute
    {
        public override void OnConfigure(IDescriptorContext context, IObjectFieldDescriptor descriptor, MemberInfo member)
        {
            var httpContextAccessor = context.Services.GetService(typeof(IHttpContextAccessor)) as IHttpContextAccessor;

            var authorizationHeader = httpContextAccessor.HttpContext.Request.Headers["Authorization"].ToString();

            var jwtService = context.Services.GetService(typeof(JwtService)) as JwtService;

            var isValidToken = jwtService.ValidateSessionToken(authorizationHeader);

            if (isValidToken == false)
            {
                // Here I want to return an Unauthorized message to the client and abort any further execution
            }

            // Everything OK
            return;
        }
    }
}

在 ASP.NET 5 中,我可以这样做

public class AuthorizeAttribute : Attribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationFilterContext context)
    {
            var httpContextAccessor = context.Services.GetService(typeof(IHttpContextAccessor)) as IHttpContextAccessor;

            var authorizationHeader = httpContextAccessor.HttpContext.Request.Headers["Authorization"].ToString();

            var jwtService = context.Services.GetService(typeof(JwtService)) as JwtService;

            var isValidToken = jwtService.ValidateSessionToken(authorizationHeader);

            if (isValidToken == false)
            {
                context.Result = new UnauthorizedObjectResult(new
                {
                    Code = 1,
                    Message = "Invalid token"
                });

                return;
            }

            // Everything OK
            return;
    }
}

如您所见,在 ASP.NET 中,我们可以将UnauthorizedObjectResult结果设置为,API 会返回该结果。

如何从 HotChocolate 中的自定义属性返回未经授权的结果?

我想我应该使用任何IDescriptorContext,IObjectFieldDescriptorMemberInfo.

有什么建议么?

标签: hotchocolate

解决方案


推荐阅读