2012-08-12 5 views
4

Akka 2.0.2 마이크로 커널을 실행 중이며 신뢰할 수없는 원격 액터에 대한 인증 체계를 구현하려고합니다.조회에서 Akka 원격 액터를 숨기는 방법?

가장 먼저 떠오르는 것은 인증이 성공했을 때 작업 액터에 대한 참조를 반환하는 인증 액터를 설정하는 것입니다.

그러나 actorFor()를 통해 원격으로 직접 조회 한 상태에서 작업 액터를 보호해야하는 이유는 무엇입니까?

즉, 원격 액터가 인증없이 마이크로 커널 액터 시스템의 액터에 액세스하지 못하도록하고 싶습니다.

actorOf()에서 작업 액터에 이름을 지정하지 않으면 쉽게 추측 할 수있는 자동 생성 된 이름을 얻을 수 있기 때문에 충분하지 않습니다. 액터의 원격 룩업을 비활성화하는 방법이 있습니까? 그렇지만 여전히 액터 레터를 원격 시스템에 제공 할 수 있습니까?

+0

아니요. Akka 메일 링리스트에서 요청하는 것이 좋을지도 모릅니다. 기능 요청 일 것입니다. –

+0

원격 액터가 인증없이 ActorSystem의 액터에 액세스하는 것을 방지 하시겠습니까, 아니면 ActorSystem의 액터가 인증없이 원격 액터에 액세스하지 못하도록 하시겠습니까? – sourcedelica

+0

원격 액터가 인증없이 마이크로 커널 액터 시스템의 액터에 액세스하지 못하도록하고 싶습니다. 나는 그것을 명확히하려는 질문을 편집했다. –

답변

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

고마워요! - 당신의 대답은 나에게 또 다른 아이디어를 주었다 : actorOf()를 통해 작업 액터에 길고 안전하게 랜덤 (토큰과 유사한) 이름을 부여하고 여분의 토큰을 사용하지 않고 ActorRef를 반환하는 것은 어떨까요? - 아니면 바보 같은 생각인가요? –

+0

흠 - 당신의 노동자들이'actorSystem.actorSelection'을 사용하여 여전히 발견 할 수있을 것 같아요. – sourcedelica

+1

네 말이 맞아, 나는 그걸 생각하지 않았다. 그렇다면 명백한 토큰입니다. –

관련 문제