【问题标题】:How to extract/decode expiration time from externally issued Json Web Token如何从外部发布的 Json Web Token 中提取/解码过期时间
【发布时间】:2016-10-15 03:11:50
【问题描述】:

所以我正在使用第 3 方 RESTful 网络服务,我必须通过请求 JWT 来验证自己并将其提供给任何进一步的请求。 我通过发布我的用户名和密码并为此接收令牌来做到这一点。除了用户名和密码,我不知道用于创建令牌的秘密,也不知道其他任何信息。

现在,我想检查 JWT 的过期时间,然后再将其用于后续的 Web 服务请求或仅更新它。我知道我可以使用它并捕获某种到期异常,但我不想这样做。

我尝试按照本教程进行操作:[https://stormpath.com/blog/token-auth-for-java]

但是卡在我必须提供签名密钥的地方。

我将如何做到这一点,因为我没有用于对其进行编码的秘密。

顺便说一句:我正在与 groovy 和 wslite 合作。

【问题讨论】:

    标签: web-services rest groovy jwt


    【解决方案1】:

    您应该能够获取令牌的主体并对其进行解码。

    私钥不用于加密 JWT 的主体,它只是用于生成签名...

    所以,在 Groovy 中你可以这样做:

    // A JWT from the link you gave above
    String key = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vdHJ1c3R5YXBwLmNvbS8iLCJleHAiOjEzMDA4MTkzODAsInN1YiI6InVzZXJzLzg5ODM0NjIiLCJzY29wZSI6InNlbGYgYXBpL2J1eSJ9.43DXvhrwMGeLLlP4P4izjgsBB2yrpo82oiUPhADakLs'
    
    // Just the body (middle section)
    String body = key.split(/\./)[1]
    
    // Un base64 it (using the Java 8 Base64 class)
    String unencoded = new String(Base64.decoder.decode(body), 'UTF-8')
    
    // Parse the json into a map
    Map data = new groovy.json.JsonSlurper().parseText(unencoded)
    
    // Get the expiry
    long exp = data.exp
    
    assert exp == 1300819380
    

    当然,没有什么可以说令牌的主体必须包含任何形式的到期时间供您查看...它可能只是一个内部 ID

    【讨论】:

    • 假期回来后,我将立即尝试。如果没有过期信息,您将如何处理?
    • 如果他们没有告诉你什么时候过期,你就必须捕获过期异常,重新验证,然后重试
    【解决方案2】:

    如果您不知道用于对其进行编码的密码,也不想破解他们的密码,那么您将无法从令牌中解码任何信息。没有像“必须在令牌中编码的标准信息”这样的东西,令牌根本不需要它应该包含任何加密信息,它可能只是存储在数据库中的随机生成的 UUID,所以在这种情况下你根本无法解码它。

    【讨论】:

    • 但是你是对的,令牌不需要像到期时间这样的任何信息
    • @tim_yates 所以在你看来base64编码不是一种加密形式?
    • 是的,就像凯撒密码一样。但是你说“如果你不知道密码......”但是你当然知道“密码”......它是Base64编码的,就像它说的那样在Section 3 of the Specification
    • 我的意思是你的第一句话在这种情况下是不相关的......可能与其他系统有关,但与 JWT 无关,其中加密用于验证签名,而不是加密消息
    • 你从哪里知道他处理的是Json Web Token而不是其他机制?
    猜你喜欢
    • 2015-06-26
    • 2016-04-15
    • 2019-11-24
    • 2016-01-07
    • 2023-03-19
    • 2019-03-10
    • 1970-01-01
    • 2012-01-30
    • 2015-09-18
    相关资源
    最近更新 更多