2017-11-04 34 views
1

我对网络服务器还是一个新东西,随着我的学习(赦免双关语)学习。但是,如何保持HTTP请求的用户身份而不必每次都要求输入用户名和密码,我有点困惑。如何在不经常传递用户名/密码的情况下识别Go服务器上的用户

我的客户端实际上是在C#(它是一个电脑游戏),我的服务器将接收来自应用程序的http请求。我可以在登录后发送用户ID,但任何人都可以发送用户ID并假装成他们不是这样的人,这不是一个安全问题吗?

我并不特别想发送用户/密码,因为这会由于敏感信息而一直强制我使用HTTPS。

这是什么一般的解决方案?我相信饼干不能因为它的C#应用​​程序来完成,而不是如Chrome浏览器等

回答

3

我相信Cookie可以”因为它的C#应用​​程序牛逼完成,而不是如Chrome等浏览器

Cookies是只是一个标题叫Cookie,并没有任何合理的HTTP库的问题。

我不是特别想发送用户/密码,因为这会由于敏感信息而一直强制我使用HTTPS。

这就是Facebook,Twitter和大多数其他网站在10年前所做的。安全的登录页面可防止您的凭证被盗用,但其他不安全的终端会显示您用于验证的任何其他信息。这可以让任何监视您不安全连接的人模拟您的用户。请参阅Firesheep

既然你应该安全地存储你的用户密码,我想可以验证你的用户密码是否每一个请求都很慢。

如果一个帐户被保证永远不会被多个客户端一次使用,那么您可以为每个用户生成一个随机的API令牌,与他们的用户名和密码无关。否则,用户登录时必须生成随机会话令牌,并使用某种数据库将其映射到实际用户。这是大多数网站处理登录的方式。

无论你做什么,如果他们知道他们的秘密(用户名+密码或会话ID),将无法防止其他人冒充他人。这就是为什么你必须使用HTTPS而不仅仅是HTTP。

+0

因此,即使数据不敏感,但要求用户发送身份标识,所有请求/响应都应使用HTTPS? – Sir

+2

@Sir:是的。令牌仍然敏感。不如用户名和密码(可能在其他网站/应用程序中重复使用),但仍然很敏感,因为它是用来验证用户身份的。 – Blender

+1

好的,谢谢:)然后,我可能会把HTTP当做这一点。 – Sir

1

我觉得这个典型的方法是使用会话ID:https://en.wikipedia.org/wiki/Session_ID

+0

是什么阻止了一些人在他们的json中假装成为不同的玩家发送该会话ID?服务器如何知道其差异? – Sir

+0

@Sir服务器不能。因此,session_id必须很长并且使用安全PRNG生成。 – zerkms

+0

@先生有2个选项。你在服务器上存储那么长的'Sessio_ID',并试图找到,如果没有找到 - 它是无效的。或者使用JSON Web Tokens https://jwt.io/ - 通过这种方式它与您签署了密钥。 –

相关问题