我有如下的Akka指令结构
cors(){
post {
extractCredentials {
credentials:Option[HttpCredentials] => {
// I can successfully inspect the credentials here
}
}
}
}
现在我尝试使用authenticateBasic
,如
private def foo(credentials: Credentials):Option[FineAuthenticationResult] = {
credentials match
case Credentials.Provided(token) =>
println(token)
Some(ValidCredentials("foo"))
case _ => Some(InvalidToken("foo"))
}
cors(){
post {
authenticateBasic(
realm = "Secure",
foo
) { authenticationResult =>
// Keep track of authorization results per channel and EVENT type
val additionalTags = Map(
"eventType" -> event.customEventType,
"channel" -> event.channel
)
authenticationResult match
case InvalidToken(message) =>
reject(CredentialsRejection(s"invalid token $message", additionalTags))
case InvalidCredentials(message) =>
reject(CredentialsRejection(s"invalid token $message", additionalTags))
case ValidCredentials(_) => complete(StatusCode.int2StatusCode(200))
}
}
}
foo
验证码总是以“Missing credentials”(缺少凭据)的情况结束。我在测试
Postman.post(uri = "/path/path",
channel = Some("a_channel"),
eventType = Some("a-request")) ~>
addCredentials(getValidToken) ~>
routes ~>
check {
status shouldBe StatusCodes.OK
}
为什么使用authenticateBasic
时我总是得到丢失的凭据,而使用extractCredentials
时总是给我正确的凭据。
1条答案
按热度按时间1l5u6lss1#
tldr
这个问题很简单,但我不得不通过
authenticateBasic
的内部来了解问题所在。我们不能将authenticateBasic
与OAuth2Token
一起使用。我们只能使用authenticateOAuth2
。更多详情
authenticateBasic
使用在引擎盖下。
authenticateBasicAsync
使用这里我们可以看到
C
原则上是BasicHttpCredentials
。但是对于addCredentials
-在OAuth0
的情况下-C
将是OAuth0Token
。因此,该collect
将删除
Credentials
对象。