【发布时间】:2016-11-03 08:46:52
【问题描述】:
我的问题是关于我使用 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)
- 用户输入数据
- 系统验证表单
- 如果表单条目正确,则系统触发
addEmployeewebservice。但是我们只传入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 请求。而在服务器端,我们只需解码 Bearer 并获取有效载荷。
我真的不想以纯文本格式发送任何数据。例如,如果我们在 body 中发送 POST 数据,那么任何人都可以看到正在传递的内容。我想在某种程度上加密我的网络服务。这种方法是正确的还是有害的?
【问题讨论】:
-
为什么不使用 https?
-
JWT 仅适用于 HTTPS。好吧,任何基于 cookie 的静态会话方案都只能通过 HTTPS 工作。
-
@MK。 JWT 适用于 HTTP 和 HTTPS。
-
@RobertMoskal 查看answer - 使用 Charles,任何人都可以非常轻松地调试 HTTPS 请求。
-
@MK.,没有加密,见我上面的 cmets。标头授权如下:
Header Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
标签: web-services rest security jwt