【问题标题】:node-adal toekn expiry and cachingnode-adal 令牌过期和缓存
【发布时间】:2016-11-01 15:15:12
【问题描述】:

尝试使用node-adal 库并且有几个问题。

  1. 我可以调用库中的函数来查看访问令牌是否已过期?我想在刷新之前检查当前的访问令牌是否有效。
  2. 目前我正在将令牌持久化到 azure 存储中,有没有办法可以将其卸载到库并让它处理将令牌持久化到表中?
  3. C# 版本的 adal 库有一个接收用户标识符的 AcquireTokenSilentAsync(String, ClientAssertion, UserIdentifier) 方法。节点版本是否有等效版本?

【问题讨论】:

    标签: node.js adal


    【解决方案1】:

    据我所知,ADAL库中没有这样的方法来检查令牌是否过期。但是它提供了一个类似的函数_refreshEntryIfNecessary 函数来检查和刷新令牌。您还可以解码 base64 编码的令牌并提取 exp 声明并与日期时间进行比较。 过期表示为 NumericDate

    一个 JSON 数值,表示从 1970-01-01T00:00:00Z UTC 到指定 UTC 日期/时间的秒数,忽略闰秒。这等效于 IEEE Std 1003.1, 2013 Edition [POSIX.1] 定义“自纪元以来的秒数”,其中每天精确计算 86400 秒,除了可以表示非整数值。请参阅 RFC 3339 [RFC3339],了解有关一般日期/时间和特别是 UTC 的详细信息。

    这里是使用jsonwebtoken 的代码供您参考:

    function isTokenExpired(token) {
        var decoded = jwt.decode(token);
        var isExpired = decoded.exp - Math.floor(Date.now() / 1000) < 0
        return isExpired;
    }
    console.log(isTokenExpired(token));
    

    目前我正在将令牌持久化到 azure 存储中,有没有办法可以将其卸载到库并让它处理将令牌持久化到表中?

    真正阻碍你的问题是什么?根据我的理解,业务逻辑是我们自己实现的。

    adal 库的 C# 版本有一个 AcquireTokenSilentAsync(String, ClientAssertion, UserIdentifier) 方法,该方法接受一个 UserIdentifier。节点版本是否有等价物?

    有几种方法可以静默获取令牌。例如,我们可以从缓存中获取令牌并在过期时刷新它。我们还可以使用 Client Credential FlowResource Owner Password Credentials Grant Flow 获取令牌。但是,NodeJs 的 ADAl 没有提供相应的方法。您可以通过 GitHub 上的Windows Azure Active Directory Authentication Library (ADAL) for Node.js 提交想法。

    【讨论】:

      猜你喜欢
      • 2017-10-31
      • 1970-01-01
      • 2023-03-06
      • 2017-05-07
      • 1970-01-01
      • 2017-12-10
      • 1970-01-01
      • 2015-12-18
      • 2016-06-24
      相关资源
      最近更新 更多