4

Akka 2.0.2マイクロカーネルを実行していて、信頼できないリモートアクターの認証スキームを実装したいと考えています。

最初に頭に浮かぶのは、認証が成功したときに作業アクターへの参照を返す認証アクターを設定することです。

ただし、認証を完全に回避して、actorFor()を介してリモートで直接検索されることから作業アクターを保護するにはどうすればよいですか?

つまり、リモートアクターが認証なしでマイクロカーネルアクターシステムのアクターにアクセスするのを防ぎたいのです。

簡単に推測できる自動生成された名前が取得されるため、actorOf()で作業アクターに名前を付けないだけでは不十分です。アクターのリモートルックアップを無効にし、それでもActorRefをリモートシステムに提供できる方法はありますか?

4

1 に答える 1

3

あなたは認証アクターと正しい方向に進んでいたと思います。認証アクターに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)
    //..
}
于 2012-08-12T13:42:43.133 に答える