据我所知,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 Flow 和 Resource Owner Password Credentials Grant Flow 获取令牌。但是,NodeJs 的 ADAl 没有提供相应的方法。您可以通过 GitHub 上的Windows Azure Active Directory Authentication Library (ADAL) for Node.js 提交想法。