根据 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 不记名令牌