如何在 akka http 的路由标头中对 OAuth2BearerToken 进行单元测试

问题描述

我有一个路由,它需要在其标头中使用访问令牌来授予对它的访问权限,因为我有这个工作代码

def accessprotectedResource: server.Route =
    path("access-protected-resource") {
      get {
        bearerToken { token =>
          token match {
            case Some(tokenValue) =>
              complete(OK,routeResponseMessage.getResponse(OK.intValue,ServerMessages.AUTH_PASS,JsObject.empty))
            case None => reject(AuthorizationFailedRejection)
          }
        }
      }
    }

  private def bearerToken: Directive1[Option[String]] =
    for {
      authBearerHeader <- optionalHeaderValueByType(classOf[Authorization]).map(extractBearerToken)
      xAuthCookie <- optionalCookie("X-Authorization-Token").map(_.map(_.value))
    } yield authBearerHeader.orElse(xAuthCookie)


  private def extractBearerToken(authHeader: Option[Authorization]): Option[String] =
    authHeader.collect {
      case Authorization(OAuth2BearerToken(token)) => token
    }

当我在 Authorization 选项卡中通过 postman 访问路由时,我选择了类型为 Bearer Token添加令牌并发送请求,现在一切正常,我想对这条路由进行单元测试 为此,我正在查看 this

但我很困惑如何在我的单元测试中以正确的方式添加标题,这是我的代码

"pass route /access-protected-resource" in {
    routeResponseMessage.getResponse(OK.intValue,JsObject.empty)

val originHeader = Authorization(OAuth2BearerToken("accesstokenString"))
  
    Get("http://0.0.0.0:8083/get-user-token") ~> originHeader ~> authenticationController.route ~> check {

   
   
    }

  }

但是我的路线被拒绝了

- pass route /access-protected-resource *** Failed ***
[info]   Request was rejected with rejection MethodRejection(HttpMethod(POST)) (CheckValidUserTokenExistsTest.scala:76)

如何正确执行此操作?

解决方法

如何使用 addCredential 并仅测试 bearerToken 包装的 Route.seal 方法像这样(https://github.com/ItoYo16u/scala-usage-playground/blob/master/src/test/scala/web/akka/JWTDirectivesSpec.scala)?