API应该有用户信息吗?

时间:2018-05-16 14:22:19

标签: javascript java angular

我制作一个简单的api,以便我的Java Spring应用程序与我的角度应用程序进行通信。

现在我意识到我需要一个包含用户信息的端点。 @GetMapping("/user/{username}")

是否可以包含编码密码?我想我需要某种保护,这样人们才能获取获取用户信息的请求。

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

您应该做的第一个问题是:端点的目的是什么?

我们可以列出许多可以使用此方法的场景。

想象一下,用户A正在请求用户B信息?

所以你需要做的是: 创建端点/user/<username>/user/<user id>以返回用户信息。但请注意,只有已记录的用户才能访问此端点,并且您应该制定一些安全策略。所有用户都可以看到所有用户信息?只有管​​理员才能看到用户信息吗?

想象一下,这是同一个用户请求他的信息

为什么使用/user/username可以使用简单的/user/me处理它并返回记录的用户信息!

记住

永远不要在URL中发送密码!您应该创建和端点/login发送usernamepassword作为帖子正文,然后您可以返回JWT或选择其他登录策略< / p>

我看到你正在使用Spring,所以look for an authentication pattern on Spring并与你的Angular集成。 Angular的最佳方法是使用JWT。

答案 1 :(得分:0)

答案取决于这些信息的敏感程度。您可以通过HTTPS传递密码,并且可以确信它不可见;但是,这可能被黑客入侵。如果攻击者拥有足够的技能和资源,那么几乎可以采用任何安全方法。

答案 2 :(得分:0)

首先,如果可以请求任何用户的信息,您应该包含有关密码的任何信息。

如果您只限制当前登录用户的访问权限,那么IMO仍然是个坏主意。

您可以非常简单地隐藏某些字段:https://stackoverflow.com/a/40913991/4813549显示如何为GSON执行此操作,https://stackoverflow.com/a/14708961/4813549有杰克逊的答案

答案 3 :(得分:0)

这是一个广泛的答案 但这取决于您验证用户的方式。如果您创建了自己的安全登录,则应立即停止。即使您对密码进行加密,编码和加密,新手用户仍有许多漏洞需要覆盖,并且有大量的库和软件可供大型和活动(开源/免费软件)社区支持,可以修补旧的,新的和常见的安全漏洞。

到目前为止我没有使用spring我觉得它有自己的库来验证用户,我可能错了。

你也可以使用像Keycloak这样的东西。我向所有人推荐。它易于实现,文档也很好。

你应该读这个 https://auth0.com/blog/angularjs-authentication-with-cookies-vs-token/ 还有这个 https://auth0.com/blog/cookies-vs-tokens-definitive-guide/

我们的想法是让您的服务器知道您的用户是否已经记录,而不是每次都发送密码。

以一种非常简化的方式,当您使用cookie登录会话时,您所做的就是在浏览器/客户端一侧创建一个cookie,并在服务器一侧创建一个具有变量的会话,他们使用它来比较用户是否已登录。并且服务器知道会话属于用户。它与令牌类似,在您登录后收到令牌,当您向后台发送请求时,您可以发送令牌,这就是服务器知道您已登录的方式。服务器知道令牌属于用户。

说,在post或get方法中发送编码密码是一个非常糟糕的主意。如果您在get方法中发送和编码密码 例如

http://myserver.com/user/myuser?password="#4$%encodedeapassword&/%EFDASF"

然后您可能会收到编码后的密码并在您的服务器中解码 如果我认为这是一个黑客我可以告诉我,我不需要你的密码登录我只需要你的网址,我想如果有人只是看你的浏览器历史记录可能能够登录。 好的,所以你不要与大家分享你的电脑。那么有嗅探器的人可能会看到这个地址并且能够登录,或只是查看代理连接的系统管理员,或者ISP知道您的登录信息。 如果你使用Post方法而不是GET方法,你会使它更安全一点,但仍然是一个多管闲事的系统管理员或有代理的人会知道你的哈希。 在这种情况下,了解您的哈希与知道密码相同。

使用会话或令牌的想法是它们过期,您可以告诉服务器终止会话或令牌。

因此,例如我在工作时登录计算机,我收到一个令牌然后离开,几个小时后我回家并从我自己的计算机登录。通常令牌有一个到期日,所以如果有人在工作时去我的电脑,如果他们在有效期之外,他或她将无法记录。 并且您可以请求服务器终止所有活动的令牌并再次强制用户使用该日志。只有知道密码的用户才能再次登录。

在您登录的情况下,您可以在web.xml中告知(还有其他方法)端点/用户/ *需要是安全的,因此只有已登录的用户才能看到它。

所以现在只允许注册用户看到该端点。如果您只想让管理员看到,根据框架你有@RolesAllowed()等符号

最后如果您希望用户只能看到他/她的信息,使用给定的令牌请求用户的信息,这样您知道user123正在请求user123的信息,如果用户名不匹配则发送和错误。

此外,在旁注中,您应该在登录时使用ssl来增加安全性。