我运行的是阿卡2.0.2微内核,并希望实现对不受信任的远程参与者的认证方案。
,想到的第一件事是建立一个认证演员时,认证成功,它返回一个参考的工作演员。
不过,我应该如何保护工作的演员从简单的直接经由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)
//..
}