我的问题是关于我使用REST实现JWT的方法。
我在客户端使用AngularJS,在服务器端使用PHP。
第一次加载页面时,我向服务器发出一个GET请求并从Web服务(编码签名)获取签名。
当有人打开网页时,我们会提供登录表单,当用户正确填写时,我们会以JWT加密格式向服务器发送登录信息:
Header(ALGORITHM & TOKEN TYPE).Payload(Login form data).Signature(Received from the first GET web service call)
现在,登录后,我们从服务器获得exp
即令牌过期超时数据。现在我们向登录用户显示另一个表单。它用于创建员工。所以,我的实现是:
addEmployee
webservice。但是我们仅在header authorization bearer
传递的数据。例如:
Host: mysite.com
POST: /services/addEmployee
Accept: application/json
Content-Type: application/json
Authorization: Bearer Header(ALGORITHM & TOKEN TYPE).PAYLOAD(Employee form data + EXP token expire time received in the response of login web service).Signature
所以,这里我们不会在请求体上传递任何内容。即使这是POST请求。在服务器端,我们只是解码承载并获得有效负载。
我真的不想以纯文本格式发送任何数据。例如,如果我们在正文中发送POST数据,那么任何人都可以看到正在传递的内容。我希望将我的Web服务加密到某种程度。这种方法无论如何都是正确的还是有害的?
答案 0 :(得分:0)
我认为你的做法是错误的。 JWT有效载荷不用于保存敏感信息。任何人都可以阅读它。 您可以记录有效负载,但这不是JWT通常用于的方式。
通常,JWT有效负载应包含不敏感或特定于请求的声明(例如,您的员工形成数据)。将这些数据保存在请求体中,这样您就可以将JWT重用于不同的API调用,无论您使用哪种HTTP动词和参数来满足您的不同需求。
整个请求将使用SSL编写,因此您不会发送任何纯文本数据。不要在没有HTTPS的情况下使用此功能,因为任何人都可以获取您的令牌并冒充用户。
希望它有所帮助,问候。