【问题标题】:REST services basic auth session timeoutREST 服务基本身份验证会话超时
【发布时间】:2013-01-14 10:55:20
【问题描述】:

我正在使用基本身份验证开发一个宁静的网络服务。在 web 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 标准,我认为它确实应该是一个从不创建会话的无状态服务。换句话说,我想强制客户为每个请求提供他们的凭据。

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

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

【问题讨论】:

    标签: rest session web.xml basic-authentication


    【解决方案1】:

    您根本不需要 元素。

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

    简单来说,基本身份验证 (rfc 2617) 的工作原理如下:

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

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

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

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

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

    【讨论】:

    • 这被配置为一个 cookie,它使用户可以在不为每个请求提供凭据的情况下进行浏览。您可以指定此 cookie/会话的有效期。
    猜你喜欢
    • 1970-01-01
    • 2019-07-26
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    相关资源
    最近更新 更多