我正在使用jwt-core庫(「com.pauldijou」%%「jwt-core」%「0.11.0」)。我得到了一個JWT令牌,我想從令牌讀取到期日期。從jwt令牌讀取到期日期
我看了他們在他們的github網站上的例子,他們有一些角度和播放框架的例子。
https://github.com/pauldijou/jwt-scala/tree/master/examples
我想只是簡單的Scala代碼。沒有涉及的UI框架。你能指點我的樣本,它可以幫助我從jwt令牌中提取到期時間戳嗎?
我正在使用jwt-core庫(「com.pauldijou」%%「jwt-core」%「0.11.0」)。我得到了一個JWT令牌,我想從令牌讀取到期日期。從jwt令牌讀取到期日期
我看了他們在他們的github網站上的例子,他們有一些角度和播放框架的例子。
https://github.com/pauldijou/jwt-scala/tree/master/examples
我想只是簡單的Scala代碼。沒有涉及的UI框架。你能指點我的樣本,它可以幫助我從jwt令牌中提取到期時間戳嗎?
智威湯遜無非是一個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"
感謝您的回答。使用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)