我正在运行 Akka 2.0.2 微内核,并希望为不受信任的远程参与者实现身份验证方案。
首先想到的是设置一个身份验证参与者,当身份验证成功时,该参与者会返回对工作参与者的引用。
但是,我应该如何保护工作参与者不被简单地通过 actorFor() 直接远程查找,从而完全绕过身份验证?
也就是说,我想防止远程参与者在未经身份验证的情况下访问我的微内核参与者系统中的参与者。
在 actorOf() 中不给工作 actor 命名是不够的,因为它将获得一个容易猜到的自动生成的名称。有没有办法禁用演员的远程查找,但仍然能够将他们的 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)
//..
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)