【问题标题】:Jaspic: handle access to unprotected resourceJaspic:处理对未受保护资源的访问
【发布时间】:2016-11-26 22:41:39
【问题描述】:

我正在研究 JASPIC,我从头开始了一个小项目来探索它以及它在 Wildfly 上的表现。第一步是调用我的 SAM validateRequest 方法并返回未受保护资源的内容,index.html 页面。好的,validateRequest 被调用。我检查MessageInfo javax.security.auth.message.MessagePolicy.isMandatory 属性是否设置为false。困难时期来了。在我的第一次尝试中,如果属性设置为 false validateRequest 返回 AUTH_SUCCESS 值,但浏览器返回 403 错误。在我的第二次尝试中,validateRequest 返回null,浏览器返回200,但响应中没有数据(与index.html 无关)。我应该怎么做才能正确处理 servlet 请求? 您可以找到来源here。谢谢。

【问题讨论】:

    标签: jakarta-ee jaspic


    【解决方案1】:

    我应该怎么做才能正确处理 servlet 请求?

    了解并遵守specification 的相关部分。对于典型的面向 Servlet 的 ServerAuthModule (SAM),它们是:

    • 服务器端消息处理模型的一般概述(第 2 点是调用 validateRequest 的位置),由 § 1.2.5 和 § 2.1.5.2 提供。后者以及第 25 页(PDF 中的第 39 页)上的模型状态图尤为重要。
    • HTTP Servlet Container Profile 对上述内容的专门化,可在 § 3.8.3.2、§ 3.8.4 和 § 3.9 中找到。

    当然,由于您也实现了工厂,因此您应该注意很多不同意义的额外细节,因此您可能很难避免阅读前三章他们的全部。

    validateRequest返回SUCCESS

    只要 SAM 的 validateRequest 实现返回 AuthStatus.SUCCESSnull 不是一个选项),它必须将调用者的身份传达给(Servlet) 在返回之前运行时,不管调用者实际上已经过身份验证还是匿名。这可以通过运行时提供的CallbackHandler 处理CallerPrincipalCallback 和/或至少一个GroupPrincipalCallback(可以将组分配给匿名调用者)来完成。使用null Principal (name) 参数构造这些回调中的任何一个,都会向运行时发出信号,即调用者将被视为匿名,或者没有组与它相关联。同样,请注意,兼容的运行时不会默认调用者是匿名的;必须明确告知,否则结果不确定。

    SUCCESS 的语义是允许请求传播到(基于 Servlet 的)服务端点,iff 基于组(角色)的调用者授权成功。然而,为了进行授权,必须让运行时知道调用者的身份,这就是上述回调是必要的原因。

    AuthStatus 值与 HTTP 响应状态代码

    两者之间的关系可能有点令人困惑。前者是协议中立的,本质上是消息处理模型中的状态转换标签。从理论上讲,它们限制了后者;实际上,由于多个组件和应用程序服务器本身可能会改变响应的状态,因此建议您在非AuthStatus.SUCCESS/AuthStatus.SEND_SUCCESSvalidateRequest/secureResponse 返回案例中自行分配。

    【讨论】:

      猜你喜欢
      • 2016-12-23
      • 2013-10-22
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 2018-07-22
      • 1970-01-01
      • 2015-06-05
      • 1970-01-01
      相关资源
      最近更新 更多