gpt4 book ai didi

scala - 如何使用 Akka HTTP 进行身份验证

转载 作者:行者123 更新时间:2023-12-03 22:33:35 24 4
gpt4 key购买 nike

寻找关于如何使用 akka HTTP 进行身份验证的很好的解释。给定的路线看起来像

val route = 
path("account") {
authenticateBasic(realm = "some realm", myAuthenticator) { user =>
get {
encodeResponseWith(Deflate) {
complete {
//do something here
}
}
}
}
}

The documentation概述了一种方法,但是省略了执行实际身份验证的相关部分......
// backend entry points
def myAuthenticator: Authenticator[User] = ???

我在哪里可以找到这种身份验证器的示例实现?我已经有了对给定用户名和密码的用户进行身份验证的逻辑,但我无法弄清楚如何从 HTTP 请求(或 RequestContext)中获取用户名/密码(或包含两者的 token )。

最佳答案

身份验证器只是一个函数 UserCredentials => Option[T] ,其中 UserCredentials 如果是(检查模式匹配) Provided verifySecret(secret)您需要安全调用和返回的方法 Some (例如某些用户)在成功的情况下,例如:

def myAuthenticator: Authenticator[User] = {
case p@Provided(username) =>
if(p.verifySecret(myGetSecret(username))) Some(username) else None
case Missing => None //you can throw an exeption here to get customized response otherwise it will be regular `CredentialsMissing` message

}
myGetSecret是您的自定义函数,它获取用户名并返回您的 secret (例如密码),可能从数据库中获取。 verifySecret将安全地比较(以避免定时攻击)提供的密码与您来自 myGetSecret 的密码.通常,“ secret ”是任何隐藏信息(如凭据或 token 的哈希),但在基本身份验证的情况下,它只是从 http header 中提取的普通密码。

如果您需要更多定制方法 - 使用 authenticateOrRejectWithChallenge得到 HttpCredentials作为输入,因此您可以从那里提取提供的密码。

更多关于授权的信息是 in scaladocs .

关于scala - 如何使用 Akka HTTP 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33203317/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com