【问题标题】:Open id connect access token expiration打开 id 连接访问令牌过期
【发布时间】:2018-06-21 00:28:41
【问题描述】:

我们正在使用 Open id connect 身份验证代码流从外部授权服务器获取刷新令牌和访问令牌。我正在考虑使用 IdentityModel 库从代码中检索令牌。

https://github.com/IdentityModel/IdentityModel2/blob/dev/README.md

令牌将与过期日期一起存储在数据库中。

我想知道检查访问令牌是否过期的最佳做法。我了解以下方法之一将有助于实现这一目标。想知道是否有更清洁和更好的方法。

  1. 使用过期的令牌访问受保护的服务。猜猜它会抛出异常
  2. 将到期日期与今天的日期进行比较。
  3. IdentityModel 库中有没有办法检查访问令牌是否过期?

还有其他更好的方法吗?

【问题讨论】:

    标签: c# asp.net-web-api access-token openid-connect


    【解决方案1】:

    我是这样做的。先用code获取access token

            _tokenClient = new TokenClient(_options.Authority);
            var response = await _tokenClient.RequestAuthorizationCodeAsync("CODE", "http://myuri");
            var token = response.AccessToken;
            var validUntil = DateTime.Now.AddSeconds(response.ExpiresIn);
    

    稍后我可以使用这个值来检查令牌是否仍然有效。您可以将有效的 until 值存储在数据库中或将其附加到您的用户会话中。

            if(DateTime.Now >= validUntil)
            {
                // token expired
            }
    

    我通常会从这个值中减去几分钟 - 所以我不必等到最后一分钟再刷新令牌。

    【讨论】:

    • 谢谢。存储在数据库中时是否加密/散列令牌?
    • 我没有将它存储在数据库中,我将它保存在内存中,如果我丢失它,我会得到一个新的。但是,我将其与客户端凭据流一起使用,而不是身份验证代码一。如果您对令牌进行哈希处理,您将无法再使用它,所以这种做法没有抓住重点。当然,如果您只想存储有效时间,您可以使用哈希作为索引。 IMO 将访问令牌存储在数据库中没有什么意义,因为唯一的存活时间很短(
    • 我们从外部身份验证服务器获取此令牌,他们提供的过期时间超过一天,并且在“刷新”时可能会有所不同。因此我们决定存储在 db 中。
    • 我不是安全专家,但我倾向于加密它,前提是您可以将密钥存储在安全的位置,(我认为 windows 有这方面的方法,但我从来没有做到了)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 2013-04-04
    相关资源
    最近更新 更多