2016-12-19 18 views
2

私はakka httpでスプレールートを変換しようとしています。トークンで認証されたscala akka httpルート

初心者にとっては本当に複雑ですが、ほとんどすべてを行います。 私は認証によって吹き飛ばされました。

実際、私はget param token = このトークンをakkaで確認するにはどうすればよいですか?現時点では私の認証機能は、(スプレーで)である

val route : Route = { 
    path("appActive") { 
      get { 
       parameters('date_end.as[Long]) { 
        date_end => 
         onSuccess(requestHandler ? AppActiveGetList(AppActiveRequest(date_end, null, 0))) { 
          case response: Answer => 
           complete(StatusCodes.OK, response.result) 
          case _ => 
           complete(StatusCodes.InternalServerError, "Error on the page") 
         } 
       } 
     } 
    } 
} 

: 私のルートがある

trait TokenValidator { 
def validateTokenApp(): ContextAuthenticator[InfoApp] = { 
    ctx => 
     val access_token = ctx.request.uri.query.get("access_token") 
     if (access_token.isDefined) { 
      doAuthApp(access_token.get) 
     } else { 
      Future(Left(AuthenticationFailedRejection(AuthenticationFailedRejection.CredentialsMissing, List()))) 
     } 
} 
} 

私はtは私が簡単に使用できる例を見つけなかったの。 お願いします。

+0

のようなルートで

def doAuthApp[T](token: String): Future[AuthenticationResult[T]] = ??? def authenticated[T](authenticator: String => Future[AuthenticationResult[T]]): AuthenticationDirective[T] = parameter('access_token.?).flatMap { case Some(token) => onSuccess(authenticator(token)).flatMap { case Right(s) => provide(s) case Left(challenge) => reject(AuthenticationFailedRejection(CredentialsRejected, challenge)): Directive1[T] } case None => reject(AuthenticationFailedRejection(CredentialsMissing, HttpChallenges.oAuth2("my_realm"))): Directive1[T] } 

そしてワイヤーあなただけの 'validateTokenApp()'アッカhttpで書き換えしようとしていますか? –

答えて

3

Akka-HTTP認証ディレクティブのように見えるのは、Sprayのものよりも厳しいものです。 doAuthAppを変更しない場合は、独自のカスタムディレクティブ(Akka-HTTP独自のauthenticateOrRejectWithChallengeの行に沿って)を定義する必要があります。どこか

val route : Route = { 
    path("appActive") { 
     (get & authenticated(doAuthApp)){ authResult => 
     parameters('date_end.as[Long]) { 
      date_end => 
      ... 
     } 
     } 
    } 
    } 
+0

それはうまく動作しますが、 "my_realm"はどうですか? –

+0

https://tools.ietf.org/html/rfc6750とhttps://tools.ietf.org/html/rfc2617に記載されているオプションのパラメータです。スプレイでは、AuthenticationFailedRejectionで拒否するときには何の挑戦も指定できませんでしたが、Akka-HTTPはもう一度厳しくなっています。レルムはオプションであり、あなたは 'reject(AuthenticationFailedRejection(CredentialsMissing、HttpChallenge(" OAuth2 "、None)))で拒否することもできます:ディレクティブ1 [T]' –

+0

レルムはオプションではなくStringですので、あなたは "None"を渡すことができると思う –

関連する問題