Scala 如何从查找中隐藏Akka远程参与者?

Scala 如何从查找中隐藏Akka远程参与者?,scala,authentication,remoting,actor,akka,Scala,Authentication,Remoting,Actor,Akka,我正在运行Akka 2.0.2微内核,希望为不受信任的远程参与者实现一个身份验证方案 首先想到的是设置一个身份验证参与者,它在身份验证成功时返回对工作参与者的引用 但是,我应该如何保护work actor不被直接通过actorFor()远程查找,从而完全绕过身份验证 也就是说,我想防止远程参与者在没有身份验证的情况下访问我的微核参与者系统中的参与者 在actorOf()中不给工作参与者一个名称是不够的,因为它会得到一个容易猜测的自动生成的名称。有没有一种方法可以禁用对参与者的远程查找,但仍然能够

我正在运行Akka 2.0.2微内核,希望为不受信任的远程参与者实现一个身份验证方案

首先想到的是设置一个身份验证参与者,它在身份验证成功时返回对工作参与者的引用

但是,我应该如何保护work actor不被直接通过actorFor()远程查找,从而完全绕过身份验证


也就是说,我想防止远程参与者在没有身份验证的情况下访问我的微核参与者系统中的参与者


在actorOf()中不给工作参与者一个名称是不够的,因为它会得到一个容易猜测的自动生成的名称。有没有一种方法可以禁用对参与者的远程查找,但仍然能够向远程系统提供他们的ActorRef?

我认为您使用身份验证参与者的方法是正确的。让身份验证参与者同时返回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)
    //..
}

我不知道。您最好在Akka邮件列表上询问,因为这可能是一个功能请求。是否要阻止远程参与者在没有身份验证的情况下访问Actor系统中的参与者,或者您想阻止actor系统中的参与者在没有身份验证的情况下访问远程参与者吗?我想阻止远程参与者在没有身份验证的情况下访问我的微核参与者系统中的参与者。我编辑了这个问题,试图澄清这一点。谢谢你的回答给了我另一个想法:简单地通过actorOf()给工作参与者一个长的、安全的随机(类似令牌的)名称,并将ActorRef返回给它,而不是使用额外的令牌,怎么样或者这是一个愚蠢的想法?嗯-我认为你的员工仍然可以通过
actorSystem.actorSelection
发现你是对的,我没有想到这一点。那么,显式标记就是它。