我正在构建一个配置系统,其他软件/ app / device / user将连接到该系统。我想创建一个识别机制,以便我可以识别连接到系统的东西是一个有效的身份。
某种关键,特定于连接软件。要求是密钥应该易于理解供应系统,但很难为其他系统破解。
我可以简单地创建一些随机字符(密钥)并在注册过程中将它提供给连接设备,以后它们将连接到配置系统,然后会出现一些问题。一个是身份盗用,任何人都可以窃取它并可以连接到配置系统;另一个是有人错误地分发了密钥。对于这两种情况,系统都无法验证连接应用程序的合法性。
任何解决这种情况的建议都非常明显。
我在10天前programmers.stackexchange.com提出同样的问题,希望指定的论坛最适合这个话题,不幸的是我没有收到任何内容。我已经标记了要求主持人将其移至SO的问题,但我的请求遭到拒绝。
我希望我能在这里得到一些帮助。
我对实现语言的主要偏好是Java。连接协议是HTTP上的SSL / TLS。
答案 0 :(得分:1)
一个是身份盗窃,任何人都可以窃取它并可以连接到 供应制度;另一个是有人错误地可以 分发密钥。对于这两种情况,系统都无法验证 连接应用程序的合法性。
在大多数身份验证模式中,客户端负责保护自己的身份。当客户端知道身份验证协议并且愿意共享允许其他客户端冒充他/它的所有细节时,实际上不可能保护并保证该客户端的身份。
如果您担心您的客户会分享他们的身份,那么您将不得不让第三方客户自己弄清楚他们实际如何进行身份验证。我能想到的一种方法是,每个客户都将被迫在他们的机器上安装专有软件,通过该软件进行身份验证。为了保持安全,软件必须非常难以进行逆向工程,但即使这样也不是绝对可靠的。
我认为首先要做的是确定为什么你如此担心保证客户的身份以及为什么它会吸引他们分享他们的身份?
例如,大多数(如果不是全部)MMORG游戏都会阻止玩家分享他们的帐户。他们肯定这样做是为了获得更多的销售额,但另一个动机可能是防止帐户比真正的单人帐户更频繁地播放,因此进展得更快。由于身份共享成为一种优势,他们不仅可以依靠玩家保持身份安全,还必须提出IP地址检查,通过ISP进行地理定位,不寻常的游戏时间等策略,但所有这些额外措施都可以克服。也许游戏设计师应该努力寻找认证策略,其中玩家不参与认证过程。
最后,在任何情况下,经常更改身份验证协议或细节肯定会使两者更难,窃取或自愿分享身份,但它并非没有成本。
您可能希望确保客户身份的另一个原因是您必须能够信任他们发送的信息。在这种情况下,目标是完全不同的,而不是看我们如何验证客户的身份,也许我们应该看看验证他们的输入的策略。输入验证策略将特定于您的域,并且有时需要更改体系结构。
我能想到的一个例子是Blockchain如何保证各个客户之间的交易完整性。
最后,在考虑针对您的问题的特定解决方案之前,您应该定义非法客户端使用您的配置系统的实际风险。只有这样,您才能选择开明的解决方案。一个好的解决方案将在风险和复杂性之间取得平衡。
答案 1 :(得分:0)
那么,您需要一种身份验证机制,而无需存储API密钥吗?看看JSON Web Tokens,也许这就是你需要的。
答案 2 :(得分:0)
你的问题似乎很抽象,所以很难找到一个正确的问题。回答。您应该考虑使用更多技术细节来询问您的问题(基于哪种技术(语言,服务器......)是您的服务器。其他人如何连接(哪种协议,传输层等)。
但是要在你的关卡上给出答案,你应该看一下非对称密钥(公钥/私钥对)。如果您担心密钥的分发,您可以将此方法与硬件解决方案(加密狗,卡)结合使用,或者您可以在首次登录时计算硬件标识符(基于MAC地址,硬件序列ID,......)对此的身份验证密钥(但这将导致支持工作,因为系统可以更改,用户可以购买新硬件,...)