scala - 如何在查找中隐藏 Akka 远程 Actor ?

标签 scala authentication remoting actor akka

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

首先想到的是设置一个身份验证角色,当身份验证成功时,它会返回对工作角色的引用。

但是,我应该如何保护工作参与者免于通过 actorFor() 直接远程查找,从而完全绕过身份验证?

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

在 actorOf() 中不给工作 Actor 一个名字是不够的,因为它会得到一个容易猜测的自动生成的名字。有没有办法禁用 Actor 的远程查找,但仍然能够将他们的 ActorRef 提供给远程系统?

最佳答案

我认为您与身份验证 Actor 走上了正确的道路。让身份验证参与者返回 ActorRef 和 token 。远程角色必须在发送给本地工作角色的消息中包含该 token 。工作角色将在执行工作之前验证 token 。

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)
    //..
}

关于scala - 如何在查找中隐藏 Akka 远程 Actor ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11921754/

相关文章:

scala - 有哪些类型级编程的例子?

Scala函数获取字母表中的下一个字母

c# - WCF 证书身份验证不起作用

c# - 与继续使用 .NET Remoting 相比,将我们的应用程序迁移到 WCF 有什么好处?

multithreading - 在 IIS 下增加 .NET Remoting 应用程序的并发请求

.NET 远程处理和 Delphi win32

Scala:比较类型

scala - SBT 集成测试设置

php - 使用 PHP 检查 mysql 数据库中的用户名和散列/加盐密码

authentication - 在 Magento 1.6.2 中登录/注销时如何从 top.links 中删除链接