加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读