scala – 如何使用Akka HTTP进行身份验证
发布时间:2020-12-16 09:10:28 所属栏目:安全 来源:网络整理
导读:寻找一个很好的解释如何使用akka HTTP进行身份验证.给出一条看起来像的路线 val route = path("account") { authenticateBasic(realm = "some realm",myAuthenticator) { user = get { encodeResponseWith(Deflate) { complete { //do something here } } }
寻找一个很好的解释如何使用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)获取用户名/密码(或包含这两者的令牌). 解决方法
验证器只是一个功能UserCredentials =>选项[T],其中
UserCredentials 在(与模式匹配检查)
Provided 具有verifySecret(秘密)方法,您需要安全地调用和返回某些(例如,某些用户)成功,如:
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是您的自定义函数,它可以获取用户名,并返回您的密码(例如密码),从数据库中获取它. verifySecret将安全地比较(以避免时序攻击)提供密码与您的密码从myGetSecret.通常,“秘密”是任何隐藏的信息(如凭证或令牌的散列),但是在基本认证的情况下,它只是从HTTP头提取的纯密码. 如果您需要更多自定义的方法 – 请使用将HttpCredentials作为输入的authenticateOrRejectWithChallenge,因此您可以从中提取提供的密码. 有关授权的更多信息是in scaladocs. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容