REST 服务基本身份验证 session 超时

标签 rest session web.xml basic-authentication

我正在使用基本身份验证开发一个 Restful 网络服务。在网络 xml 中,我有以下内容:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Services</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>User</role-name>
    </auth-constraint>
</security-constraint>
<session-config>
    <session-timeout>1</session-timeout>
</session-config>

这按预期工作:用户在与服务交互时必须提供密码。

但是,为了符合更多的 RESTful 标准,我认为它确实应该是一个永远不会创建 session 的无状态服务。换句话说,我想强制客户为每个请求提供他们的凭据。

如果我在 web-xml 中将 session 超时设置为 0,这将被解释为“永不过期”,这与我想要的完全相反。

有没有一种简单的方法可以让 session 立即失效?

最佳答案

您根本不需要 元素。

您体验的是浏览器如何实现身份验证协议(protocol)。

简而言之,基本身份验证 (rfc 2617) 的工作原理如下:

  1. 客户请求一些资源。
  2. 服务器识别出该资源具有安全约束。因此它发送 HTTP 401“需要授权”响应。 header 包含类似...

    WWW-Authenticate: Basic realm="Protected"
    
  3. 客户端重新发送请求,但这次在 header 中使用凭据(base64 编码),例如...

    Authorization: Basic dG9tY2F0OnMzY3JIdA==
    
  4. 服务器根据给定的凭据对请求进行身份验证并发送请求的资源。

为了方便人们浏览网页,几乎每个浏览器都会缓存凭据,直到浏览器关闭。每次您在浏览器中重新加载页面时,“授权”条目都会与请求 header 一起发送。因此,在使用浏览器测试 Web 服务时,不会再次要求您提供凭据。

使用 Firefox,您可以控制该行为。查看有关 Firefox quickly forget HTTP Basic Auth 的讨论.

关于REST 服务基本身份验证 session 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14317141/

相关文章:

jsp - 为什么文件 "web.xml"有无用的 <taglib>

security - 排除 web.xml 中的 css 和图像资源 安全约束

rest - 设计具有多个 ID 的 RESTful 服务

java - 从 Spring Boot JSON 响应中删除 "_embedded"和 "_links"

python - Django:过滤请求结果以仅包含与请求用户相关的数据

PHP session.cookie_secure : Disables sessions when set to true

rest - 当参数中的实体不存在(或访问被拒绝)时,RESTful API 方法 [POST/PUT] 的正确响应代码

java - 如何将请求分派(dispatch)回发送请求的页面?

asp.net - Redis session 状态提供程序使 session 无效

tomcat - servlet 容器如何识别来自经过身份验证的用户的请求?