Authentication Akka AuthenticateAuth2Async:缺少凭据

Authentication Akka AuthenticateAuth2Async:缺少凭据,authentication,oauth,oauth-2.0,akka,Authentication,Oauth,Oauth 2.0,Akka,我有以下资料: def myUserPassAuthenticator(credentials: Credentials): Future[Option[String]] = { log.info(credentials.toString) credentials match { case p@Credentials.Provided(id) if p.verify("a") => log.info("Login success!")

我有以下资料:

  def myUserPassAuthenticator(credentials: Credentials): Future[Option[String]] = {
    log.info(credentials.toString)
    credentials match {
      case p@Credentials.Provided(id) if p.verify("a") =>
        log.info("Login success!")
        Future.successful(Some(id))
      case _ =>
        log.info("Login failure!")
        Future.successful(None)
    }
  }

  val authRoute = path("login") {
    authenticateOAuth2Async(realm = "secure site", myUserPassAuthenticator) { userName =>
      complete(s"The user is '$userName'")
    }
  }
导航到该端点并输入凭据时,日志行

log.info(credentials.toString)

只是变得
缺失
。这里怎么了

请求的内容类型为
“application/x-www-form-urlencoded”

数据是
“授权类型=密码&用户名=此处插入用户名&密码=此处插入密码”

您应该将您的路线包装在
路线中。seal
指令:

  val authRoute =
    Route.seal {
      path("login") {
        authenticateOAuth2Async(realm = "secure site", myUserPassAuthenticator) { userName =>
          complete(s"The user is '$userName'")
        }
      }
    }
如果身份验证失败,它似乎依赖于默认拒绝401

给定一个函数,在成功验证后返回一些[T],并 否则,将分别应用内部路由或拒绝内部路由 带有AuthenticationFailedRejection拒绝的请求,通过 默认值映射到401未经授权的响应

《公约》明确规定:

可以使用Route.seal“密封”路由,它依赖于范围内的 用于转换拒绝的RejectionHandler和ExceptionHandler实例 并将异常转换为客户端的相应HTTP响应


密封它对我的情况没有帮助,但也许请求是错误的?我已经更新了我的问题。我认为这里的问题与您的请求标题有关。Akka Oauth2实现(OAuth2BearerToken.scala)希望在请求上设置
承载
头,例如:Authorization:Bearer mF_9.B5f-4.1JqM.Ah,这是有意义的。奇怪的是,它只是“无”,没有返回其他错误。哦,好吧。