2014-01-16 42 views
2

因此,我有一个页面在html页面中使用输入字段的ajax来张贴json数据。从javascript发送一个共享密钥进行身份验证

ajax发布到一个不同的服务器,服务器当前检查授权标头,并将其与共享密钥进行比较,如果密钥匹配json请求执行(请求通过https完成)。

我担心的是任何人都可以打开源代码并查看共享密钥,这意味着任何人都可以向我的服务器发送经过身份验证的请求(错误)。

因此,我想加密密钥,但这只是让我再次遇到第一个问题。

我无法从生成html页面的相同服务器(在服务器端)执行json请求,因为它太慢了。我可以控制发送的内容,但不会在发送时发送。

我正在使用ajax调用,因为我需要立即使用这些数据。

我该如何创建一个令牌,一个恶意用户不能伪造,所以我可以相信这个json请求来自我期望它来自的服务器/页面?

+0

会不会https(而不是http)做的伎俩? –

+0

@barakmanos:https只是确保数据不会被*路由*篡改,而不是在源头伪造。 –

+0

感谢您的额外知识:) –

回答

0

之后的评论我更好地理解您的用例:服务器A将用HTML表单作出回应,用户完成后,它将被提交给服务器B.您如何确保表单发布到B实际上来自html表单,而不是来自其他地方?

一个短命令代替一个唯一的密钥会更好,但是使用像nokogiri或jsdom这样的任何人都可以轻松地解析你的表单并发出自动请求。

我认为一个验证码机制,如Google reCAPTCHA是你在找什么。浏览器中的页面将使用公钥向验证码服务器请求验证码,用户必须从图像中输入这些字母,然后在提交表单后,服务器B将用秘密验证该值。

+0

什么是阻止恶意用户调用生成此JWT的html页面,然后立即使用JWT调用API?它并没有真正解决问题,它只是增加了一个额外的步骤,使恶意用户的流程更难,但仍然相对简单。 FWI:服务器A是Salesforce(APEX),服务器B是C#(WEB API)。 – user1515024

+0

用户凭证,您在通过身份验证后会从服务器A获得JWT。 –

+0

没有用户登录,因为服务器A上填写了表单,数据被发送到服务器B. – user1515024

相关问题