如何隐藏查找阿卡远程演员?(How to hide Akka remote actors from

2019-07-30 22:49发布

我运行的是阿卡2.0.2微内核,并希望实现对不受信任的远程参与者的认证方案。

,想到的第一件事是建立一个认证演员时,认证成功,它返回一个参考的工作演员。

不过,我应该如何保护工作的演员从简单的直接经由actorFor()远程抬头一看,干脆绕过身份验证?

也就是说,我想阻止远程演员在我的微内核系统演员演员访问未经验证。

不给工作男主角actorOf名称()是不够的,因为它会得到一个容易猜测的自动生成的名称。 有没有一种方法来禁用远程查找的演员,但仍然能够给他们的ActorRef到远程系统?

Answer 1:

我觉得你在正确的轨道与认证演员上。 有认证演员同时返回ActorRef和令牌。 远程参与者必须包括在消息中该令牌到本地工人的演员。 工人将演员做的工作之前验证令牌。

trait AuthenticatingActor { this => Actor
  val authenticationService = //...

  def receive = {
    case UnauthenticatedRequest(token, msg) =>
      if (authenticationService.validate(token) 
        authenticatedRecieve(msg)
      else
        sender ! RequestNotAuthenticated(token, "token invalid")

  def authenticatedReceive: Receive
}

class Worker extends AuthenticatingActor with Actor {
  def authenticatedReceive: Receive = //..
}

class AuthenticationActor extends Actor {
  val authenticationService = //..
  var worker: ActorRef = _

  def receive = {
    case Authenticate(username, password) =>
      val token = authenticationService.authenticate(username, password)
      sender ! token.map(AuthenticationSuccess(_, worker).
                     getOrElse(AuthenticationFailure)
    //..
}


文章来源: How to hide Akka remote actors from lookup?