【问题标题】:HTTP Basic authentication (Java / Jersey)HTTP 基本身份验证(Java/Jersey)
【发布时间】:2015-06-01 14:37:07
【问题描述】:

我创建了REST webservice 并使用HTTP Basic authentication 保护它。

它工作正常,并要求username/password。 但是在第二次运行时(如果浏览器仍然打开),网络服务不会要求username/password。如果我关闭并重新打开浏览器,它会按我的意愿工作 - 要求进行身份验证。

我希望网络服务在每次运行时都询问用户名/密码(无论其他网页是否打开)。

知道我该怎么做吗?

【问题讨论】:

  • 也许您的浏览器没有缓存凭据?
  • 这可能没什么好担心的。使用 HTTP Basic,您的 Web 服务的客户端必须使用用户名和密码对每个请求进行身份验证。尝试使用 Postman 等 REST 客户端(而不是浏览器)测试您的服务,以查看其行为方式。正如 Blackus 所说,您的浏览器可能只是在缓存凭据,但这并不意味着它们不会每次都被发送。
  • 您可以编写单元测试用例来确保相同..
  • 如果您从基本身份验证转移到某些自定义策略,浏览器将无法通过自动填充凭据来“帮助”用户。也许在表单字段或自定义标题中传递 uname/pwd?

标签: java web-services rest security


【解决方案1】:

这是因为基本身份验证方案是implicit authentication 方案。

一旦通过身份验证,浏览器将自动在后续请求中包含凭据。防止这种情况的唯一方法是打开匿名会话或关闭浏览器。这些身份验证方案容易受到CSRF 攻击。

正如我在回答 here 中所讨论的那样,我更喜欢其他身份验证方案而不是基本身份验证还有其他原因。

【讨论】:

    【解决方案2】:

    没有办法解决这个问题:浏览器会随每个请求发送用户/密码,直到您关闭它。

    【讨论】:

      猜你喜欢
      • 2013-01-14
      • 2019-01-07
      • 1970-01-01
      • 2021-03-21
      • 2011-11-12
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 2011-02-11
      相关资源
      最近更新 更多