根据 JWT 身份验证令牌中的声明验证来自请求的 IP

Posted

技术标签:

【中文标题】根据 JWT 身份验证令牌中的声明验证来自请求的 IP【英文标题】:Validate IP from request against claim in JWT authentication token 【发布时间】:2016-12-23 11:59:06 【问题描述】:

我正在开发一个使用 JWT 身份验证的 .Net Core Web API(如 here)。

我添加了一个新的 Claim 来存储请求的 ip 地址,然后,我想在每个连续的请求上检查它,以验证请求的 ip 地址源是否与最初请求令牌的 ip 相同。

为此,我做了一个基于自定义策略的身份验证(如here),我想在策略的 AuthorizationHandler 上获取每个请求的 ip,但我无法获得它(this 没有'不适用于 AuthorizationHandler)。

也许这不是我想要的方式,有人可以帮助我吗?

谢谢!

【问题讨论】:

您为什么不信任 JWT 并在您的服务中需要这种额外的身份验证? 因为如果有人窃取了令牌,我不希望它可以从另一个 ip 使用。也许 JWT 有办法缓解这种情况,我不知道。谢谢@thoean 对于一个高度复杂的问题,这听起来过于简单化了。我假设您通过 HTTPS 作为基线加密所有内容,并遵循其他做法来防止 XSS 等攻击。这是一篇有趣的文章开始:auth0.com/forum/t/stealing-jwt-from-authenticated-user/352/12 是的,没错。我会读那个链接。谢谢。 我也在考虑IP验证。原因是我将我的 API 暴露给有限的来源,他们不应该在允许的场所之外使用它。我不知道这是否是个好主意,但至少对少数攻击者有用。 【参考方案1】:

最后我做的是this获取IP。

然后我添加一个ActionFilterAttribute 覆盖OnActionExecuting

在该过滤器中,我从声明中获取原始 IP,并将其与请求 IP (context.HttpContext.Connection.RemoteIpAddress) 进行比较。

【讨论】:

以上是关于根据 JWT 身份验证令牌中的声明验证来自请求的 IP的主要内容,如果未能解决你的问题,请参考以下文章

来自 C# HttpClient 针对 Spring 服务器 JWT 令牌的身份验证

Web API 验证来自自定义身份验证提供程序的 JWT 不记名令牌

如何在 django rest 框架中验证 jwt 身份验证中的令牌

Asp.Net Web API JWT 身份验证

Spring过滤器将角色添加到来自令牌的请求

JWT 身份验证 - 为新注册的用户请求令牌时遇到问题