【问题标题】:Destroy token in Token-based Authorization in Web API after user signs out用户退出后销毁 Web API 中基于令牌的授权中的令牌
【发布时间】:2018-06-25 05:29:26
【问题描述】:

我的要求

我有一个 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 项目。

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

【问题讨论】:

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


    【解决方案1】:

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

    如果用户有有效的token,那么他就和登录一样好。当他退出时,你只能用token清除他的cookie。这不是一个错误,这是一个功能;)

    最好的解决方案是接受这一点,不要担心用户想用他的令牌做什么。

    【讨论】:

    • 这是一个错误 100%
    • @Toolkit 这是一项功能。这就是基于令牌的授权的工作方式。在给出意见之前阅读文档,基于什么?你的感受?
    【解决方案2】:

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

    【讨论】:

    • 如果您想为每个请求验证检查数据库,使用令牌有什么意义?
    • @garret +1。使用这种方法只会增加操作时间,因为我必须在每个请求上 ping 数据库并等待它的响应,然后是原始 API 响应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 2015-04-24
    • 2021-11-21
    • 2015-10-05
    • 2015-01-15
    • 2019-05-14
    • 2016-11-18
    相关资源
    最近更新 更多