首页 > 解决方案 > 没有http上下文的asp net core auth。(智威汤逊)

问题描述

我对 .net 核心中的身份验证有疑问。我需要你的建议。我有处理程序(命令或查询),可以从 web api 控制器调用,也可以从 Kafka 消费者调用。

由于可以从 Web API 控制器或 Kafka 消费者调用处理程序,因此我想将身份验证逻辑作为装饰器集中到处理程序。

例子。

public class CreateUserCommand : ICommand
{
   public string Email {get; set;}
   public string Password {get; set;}
}

public class CreateUserCommandHandler : ICommandHandler< CreateUserCommand >
{
    public void Handle(CreateUserCommand command)
    {
      // some business logic
    }
}

public class AuthDecoator : ICommandHandler<TCommand>
{
   public AuthDecoator (ICommandHandler<TCommand> decoratee)

    public void Handle(CreateUserCommand command)
    {
      // handle auth, if valid 
      decoratee.Handle(command);
    }
}

// From Web API
public class UsersController : ControllerBase
{
   public IActioneResult Register(string email, string password)
   {
       createUserCommandHandler.Handler(new CreateUserCommand { Email = email, 
         Password = password })
   }
}

public class RegisterUser
{
   public string Email {get; set;}
   public string Password {get; set;}
}

// From Consumer
public class RegisterConsumer : ConsumerBase
{
   public ConsumeResult Consume(RegisterUser)
   {
       createUserCommandHandler.Handler(new CreateUserCommand { Email = email, 
         Password = password })
   }
}

通过这种方式,我将有机会保护所有类型的调用,例如 Kafka 消费、http 或批处理作业

所以我的问题是

  1. 将身份验证作为处理程序的装饰器是个好主意吗?
  2. 如果是这样,我如何在没有 http 上下文的情况下编写自己的“AuthenticationHandler”?我的功能代码不应该知道传输协议,例如 http/s

我检查了诸如“AuthenticationHandler”之类的选项,但都取决于 http 上下文。

标签: asp.net-coreauthenticationjwtauthorizationdecorator

解决方案


推荐阅读