【发布时间】: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