有没有办法检查oauth令牌是否已过期?

时间:2016-04-01 06:52:17

标签: c# asp.net-web-api oauth

我正在使用oauth令牌访问web api。

令牌在1 hour之后到期。但是我希望在过期时添加生成新令牌的功能。

我发现如果有过期令牌,它会将StatusCode发送为unauthorized

如果它是唯一一个告知令牌过期的状态代码,请告诉我。

3 个答案:

答案 0 :(得分:6)

再次复活这个帖子并采用@Lavandysh的解决方案并拉入System.IdentityModel.Tokens.Jwt类;调用此方法以了解令牌在请求之前是否仍然有效:

    public bool _isEmptyOrInvalid (string token)
    {
        if (string.IsNullOrEmpty(token))
        {
            return true;
        }

        var jwtToken = new JwtSecurityToken(token);
        return (jwtToken == null) || (jwtToken.ValidFrom > DateTime.UtcNow) || (jwtToken.ValidTo < DateTime.UtcNow);
    }

答案 1 :(得分:2)

我在开发 Xamarin Forms 应用程序时遇到了这个问题。这里的主要问题是我无法在项目中安装任何 Nuget。所以我决定改进@Lavandysg 的答案,因为它没有正确提取到期时间戳,也没有正确计算到期时间。这是我使用正则表达式从令牌中提取过期时间的最终代码:

retry if response.code != "200"

答案 2 :(得分:1)

最简单的方法是尝试使用它来调用服务。如果它已过期,它将拒绝它,然后你可以请求一个新的。

您还可以保留收到令牌的时间,并使用expires_in计算约会何时到期。然后在到期日期之后发出新请求之前请求新令牌。