gpt4 book ai didi

security - 使用 IP 地址的 JWT 安全性

转载 作者:行者123 更新时间:2023-12-04 02:25:51 30 4
gpt4 key购买 nike

我正在使用 Angular 2 和内置于 ASP.NET Core Web API 的后端服务构建一个 Web 应用程序。

对于身份验证,我正在考虑使用 JWT并将 token 存储在安全的 HttpOnly Cookie 中。

为了额外的安全性,我还考虑在初始登录时和初始登录后的每个请求中捕获用户的 IP 地址,如果 IP 地址更改,则撤销 token 。

所以我的问题是:

  • 这种额外的安全级别值得吗?
  • 我正在考虑使用的 IP 检查会不会有任何问题?根据我对网络的了解,我认为 IP 地址不会在请求之间合法更改。即使是这样,我认为这将是非常罕见的。但是,我不会假装我对网络有足够的了解来确认这一点。

  • 编辑 1

    (回应一个答案)。

    谢谢你回答我的问题。我已经回复了您的一些回复。

    My initial thought was that using JWT in a cookie to connect to an API is not the typical use case, why don't you use a standard MVC app then, but that's not your question and actually it's equally secure as long as the token is in a secure, httponly cookie (and of course the implementation is correct). It's just a bit unusual I think.



    我不知道你为什么认为以这种方式使用 cookie 不寻常?

    是不是因为大部分时间 cookie 都用于 session 状态?我个人认为将 token 存储在安全 cookie 中而不是将 token 保存在 http 中 header 或本地存储应该是一个非常典型的用例,因为它更安全。除非我错过了什么?

    所以我想我会问这样做的缺点是什么?

    It depends. If you are worried about session theft, probably yes. If you keep the token in an httponly cookie (protected against xss), that's more secure than a token anywhere else, but still, your threat model may show different threats and validate your concern. The usual problem is you can't do this, see below.



    此应用程序将处理大量 PPI信息,所以我确实担心 token 被盗。

    Most probably, there will be problems. It depends on your users, how and from where they use your application. If they use mobile devices, IP addresses will change a lot and such a solution is out of the question. If they are corporate users in a company internal network, it can be feasible. Anything inbetween is a gray area. A typical home user will have their IP changed once in a while, most people get dynamic IP allocation from their internet providers. An IP lease typically lasts a few weeks (at least where I live), but ISPs can configure it any way they want, it can be a day or even shorter.



    我对 IP 地址租约续订的印象是客户端获得相同 IP 地址的大部分时间。但是我不应该做出我认为的那个假设?

    但是我可以看到这对于移动设备来说可能是一个更大的问题。一些客户会经常在路上,所以这是你提出的一个好点,可能会成为一个问题。

    One typical solution you can choose to do is offer this option on the login screen. If a user chooses to use IP address validation, he opts for greater security but accepts the fact that sometimes he may have to log in again. Or he can choose lower security with his session being more stable. Whether it's worth to explain this to your users is I think a business decision.



    从来没有想过给客户一个听起来不错的选择。

    编辑 2

    (回应一个答案)。

    Also I'm not sure whether your JWT only has a session id or if your server is stateless and all session data is in the JWT. In the first case, you don't even need the JWT, you could just pass the session id as normal, and standard .Net MVC does that for you. If it's session data too, JWTs are unencrypted by default, so session contents will be visible to endusers, which may or may not be a problem. (And a JWT is protected from tampering by its signature, so it's only about confidentiality, not integrity). Storing session data in the JWT and the JWT in the cookie may also face cookie size issues, depending on your target browsers.



    我的后端 ASP.NET Core Web API 将是无状态的。已经决定使用 Angular所以讨论是有争议的。

    As for why I think using a JWT this way is a little unusual: I think JWTs are mostly used when tokens need to be passed to different URLs (to different services). For this purpose, httpOnly cookies are obviously inadequate because of the same origin rule. If you can afford using httpOnly cookies, you could just store your session info on the server side.



    尽管我很想讨论上述主题,因为我的解决方案可能存在缺陷,但我认为可能会因偏离主题而关闭这篇文章?

    针对上述主题提出一个新问题可能更合适?

    As for lease renews resulting in the same IP: Well, they don't always. It depends on your business case, but some ISPs give you IPs only for a short time. If it's ok for your users to get logged out once in a while, then it may be ok for wired (home) users. And it is definitely a big problem with mobile devices.

    最佳答案

    我最初的想法是在 cookie 中使用 JWT 连接到 API 不是典型的用例,那么为什么不使用标准的 MVC 应用程序,但这不是你的问题,实际上它同样安全,只要 token 是在安全的 httponly cookie 中(当然实现是正确的)。我觉得这有点不寻常。

    关于这一点,您的问题非常有效,您对问题的关注也是如此。

    Is this extra level of security worth it?



    这取决于。如果您担心 session 被盗,可能是的。如果您将 token 保存在 httponly cookie(防止 xss)中,这比其他任何地方的 token 更安全,但是,您的威胁模型可能会显示不同的威胁并验证您的担忧。通常的问题是你不能这样做,见下文。

    Will there be any problems with the IP check I am thinking of using?



    很可能,会有问题。这取决于您的用户,他们使用您的应用程序的方式和地点。如果他们使用移动设备,IP地址会发生很大变化,这样的解决方案是不可能的。如果他们是公司内部网络中的公司用户,这是可行的。介于两者之间的任何东西都是灰色区域。一个典型的家庭用户会偶尔更改他们的 IP,大多数人从他们的互联网提供商那里获得动态 IP 分配。 IP 租约通常持续数周(至少在我居住的地方),但 ISP 可以按照他们想要的任何方式进行配置,可以是一天甚至更短。

    所以现实是,如果你有一个正常的、普通的用户群,你很可能会遇到问题。

    您可以选择的一种典型解决方案是在登录屏幕上提供此选项。如果用户选择使用 IP 地址验证,他会选择更高的安全性,但接受有时他可能必须再次登录的事实。或者他可以选择较低的安全性,而他的 session 更稳定。我认为是否值得向您的用户解释这一点是一个商业决策。

    更新 回应编辑 1 :)

    至于为什么我认为以这种方式使用 JWT 有点不寻常:我认为 JWT 主要用于需要将 token 传递到不同 URL(到不同服务)的情况。为此,由于同源规则,httpOnly cookie 显然是不够的。如果您负担得起使用 httpOnly cookie,您可以将 session 信息存储在服务器端。另外,我不确定您的 JWT 是否只有 session ID,或者您的服务器是否是无状态的并且所有 session 数据都在 JWT 中。在第一种情况下,您甚至不需要 JWT,您可以像往常一样传递 session ID,标准 .Net MVC 会为您完成。如果它也是 session 数据,默认情况下 JWT 是未加密的,因此最终用户可以看到 session 内容,这可能是也可能不是问题。 (并且 JWT 可以通过其签名防止篡改,因此它仅与 secret 性有关,与完整性无关)。将 session 数据存储在 JWT 中并将 JWT 存储在 cookie 中也可能面临 cookie 大小问题,具体取决于您的目标浏览器。

    至于导致相同 IP 的租约更新:嗯,它们并不总是如此。这取决于您的业务案例,但某些 ISP 仅会在短时间内为您提供 IP。如果您的用户可以偶尔注销,那么有线(家庭)用户可能没问题。这绝对是移动设备的一个大问题。

    关于security - 使用 IP 地址的 JWT 安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44217188/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com