2017-02-25 57 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

智威湯遜無非是一個base64編碼和簽署string

我不能幫助您從智威湯遜中提取的截止日期,但我可以通過獲取一個有效期限從一個智威湯遜的步驟會幫助你。


下面是一個示例令牌:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImV4cCI6MTIzNDIzNDIzNH0.ADaAdqIjKzQ4uPlavizyGyng2Vq1yQqYjcZ-EeqN8Do 

您可以通過複製的例子檢查解碼版本,並在jwt.io與碼解碼它secret

智威湯遜的第二部分是你的有效載荷,其中過期日期最有可能居住。您需要檢查提供程序端的有效負載定義並瞭解其屬性。

現在,斯卡拉部分:

首先,將具有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)