2017-02-25 17 views
1

jwt-coreライブラリ( "com.pauldijou" %% "jwt-core"% "0.11.0")を使用しています。私はJWTトークンを与えられており、トークンから有効期限を読みたいと思っています。jwtトークンからの有効期限の読み取り

githubサイトにあるサンプルを見て、フレームワークの例をいくつか見てきました。

https://github.com/pauldijou/jwt-scala/tree/master/examples

私は単なるScalaのコードをしたいです。 UIフレームワークは関係ありません。 jwtトークンから有効期限のタイムスタンプを抽出するのに役立つサンプルを教えてください。

答えて

1

JWTはbase64と符号化され、stringと署名されたものです。

私はあなたのJWTから有効期限を抽出助けることはできませんが、私は JWTから有効期限を取得する工程を経ることであなたを助けることができます。ここで


は、サンプル・トークンです:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImV4cCI6MTIzNDIzNDIzNH0.ADaAdqIjKzQ4uPlavizyGyng2Vq1yQqYjcZ-EeqN8Do 

あなたはJWTの2番目の部分は、あなたの場合の例をコピーし、コードsecret

jwt.ioでそれを復号化して復号されたバージョンを確認することができますペイロード、有効期限が最も生存する可能性が高い場所。プロバイダ側のペイロード定義を確認し、その属性が何であるかを理解する必要があります。今

、Scalaの一部について:

まず、JWTはJSONでフォーマットされた - JWT:JSONウェブトークン - あなたはJSONシリアライザ/デシリアライザライブラリを選択する必要があります。この例では、私はspray-jsonを使用しています。

import java.util.Base64 
import spray.json._ 

case class Payload(sub: String, name: String, admin: Boolean, exp: Int) // exp is the expiration date 

object ExpirationDateTest extends DefaultJsonProtocol { 

implicit val payloadJsonFormat: RootJsonFormat[Payload] = jsonFormat4(Payload) // defines a contract to deserialize the JSON object 

val jwtToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImV4cCI6MTIzNDIzNDIzNH0.ADaAdqIjKzQ4uPlavizyGyng2Vq1yQqYjcZ-EeqN8Do" 

val jwtTokenPayload = jwtToken.split('.')(1) 

val expirationDate = new String(Base64.getDecoder.decode(jwtTokenPayload)).parseJson.convertTo[Payload].exp 

def getExpirationDate: Int = { 
    expirationDate 
} 
} 
println(ExpirationDateTest.getExpirationDate) 

結果:使用

スプレーライブラリです:答えを"io.spray" %% "spray-json" % "1.3.2"

0

感謝。 scala-jwtライブラリを使うこともとても簡単でした。

import pdi.jwt._ 
import scala.util.{Failure, Success} 
import io.circe.generic.auto._ 
import io.circe.parser._ 

val expTimeOpt = Jwt.decode(token, JwtOptions(signature = false, expiration = true, notBefore = false, leeway = 0)) match { 
    case Success(s) => decode[JwtExpiration](s).fold[Option[JwtExpiration]](_ => Option.empty[JwtToken], Some(_)) 
    case Failure(f) => Option.empty[JwtExpiration] 
} 

case class JwtExpiration(exp: Long) 
関連する問題