在用户退出

时间:2018-01-16 13:28:20

标签: asp.net asp.net-web-api asp.net-web-api2 asp.net-authorization

我的要求

我有一个Web API,可以从数据库中获取所需的数据。我有一个.Net网站,它使用这个Web API来获取所有数据。现在要求保护API免于暴露给网络上的任何人。

到目前为止我做了什么:

在网站上:

我在用户登录时生成令牌。此令牌包含用户名,随机密钥和令牌的到期时间等详细信息,所有这些都在加密字符串中。

在API上:

在每次请求时,在发送响应之前,我解密令牌并验证用户名,密钥和到期时间是否有效。如果所有这些都有效,则会发送响应。否则,将发送错误消息作为响应。 这是我改变的功能:

protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            AuthenticationHeaderValue authorization = request.Headers.Authorization;
            if (authorization != null)
            {
                if (Encryption.DecryptData(token).Equals(ConfigurationManager.AppSettings["TokenKey"].ToString()))
                {
                    //Send response
                }

            }
        }

直到这里一切都很好。

现在问题是......

我们说我为令牌设置了15分钟的到期时间。因此,生成的令牌可以在登录后使用15分钟以获取API的响应。 无论用户的登录状态如何,都可以使用此令牌,即即使用户在登录后立即退出,令牌也有效15分钟。

过去几天我一直在集思广益并寻找解决方案,我想到了在会话中处理数据的想法,但后来发现在可扩展性方面这是一个坏主意。

还有一些限制,我不能使用OWIN。此外,该项目不是MVC,它是一个Web API项目。

有人可以来救我并指出我的解决方案吗?我将不胜感激,因为这已经消耗了很多时间。

2 个答案:

答案 0 :(得分:0)

您无法使令牌无效。 如果用户有令牌,则表示他已登录。 我有这个问题,当我不得不使令牌无效时,我发现任何解决方法都不适用于你的情况。 how-to-force-invalid-bearer-token-in-web-api

如果用户拥有有效的令牌,那么他就像他一样好。当他退出时,你只能用令牌清除他的cookie。这不是一个错误,它是一个功能;)

最佳解决方案是接受此操作,并且不要担心用户想要使用其令牌做什么。

答案 1 :(得分:-1)

您可能正在某处存储令牌详细信息(可能是SQL数据库),以便在API中对其进行验证。为什么不添加一个字段&#34;启用&#34;在用户注销时设置为0的数据库中,然后让API检查该字段作为验证的一部分,以及检查用户,令牌和到期时间。