我对JWT的方法 - REST API

时间:2016-07-01 04:13:51

标签: web-services rest security jwt

我的问题是关于我使用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即令牌过期超时数据。现在我们向登录用户显示另一个表单。它用于创建员工。所以,我的实现是:

  • 我们提供表格(使用angularjs)
  • 用户输入数据
  • 系统验证表格
  • 如果表单条目正确,则系统会触发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服务加密到某种程度。这种方法无论如何都是正确的还是有害的?

1 个答案:

答案 0 :(得分:0)

我认为你的做法是错误的。 JWT有效载荷不用于保存敏感信息。任何人都可以阅读它。 您可以记录有效负载,但这不是JWT通常用于的方式。

通常,JWT有效负载应包含不敏感或特定于请求的声明(例如,您的员工形成数据)。将这些数据保存在请求体中,这样您就可以将JWT重用于不同的API调用,无论您使用哪种HTTP动词和参数来满足您的不同需求。

整个请求将使用SSL编写,因此您不会发送任何纯文本数据。不要在没有HTTPS的情况下使用此功能,因为任何人都可以获取您的令牌并冒充用户。

希望它有所帮助,问候。