【问题标题】:Is there a way to work around RatpackPac4j#requireAuth not setting the WWW-Authenticate header?有没有办法解决 RatpackPac4j#requireAuth 不设置 WWW-Authenticate 标头?
【发布时间】:2018-06-19 10:45:24
【问题描述】:

在 Ratpack (1.5.x) 应用程序的上下文中测试 Pac4j (2.x) 身份验证时,我发现当我使用此处理程序时:

all RatpackPac4j.requireAuth(HeaderClient)

...未经授权的请求以 401 状态被正确拒绝,RFC-7235 声明应该添加 WWW-Authenticate 标头,但事实并非如此。

我在 RatpackPac4j 跟踪器 here 上提出了一个问题,但由于 Pac4j v3 正确地实现了这一点,它被关闭为(我推断)“无法修复”。而且 RatpackPac4j 还没有升级到与 Pac4j v3 一起工作。

那么:是否可以插入一些对所有响应进行后处理的内容,例如,根据响应有条件地添加标头?

除此之外 - 我在我的 gradle 配置中使用以下版本:

    compile group: 'io.ratpack', name: 'ratpack-groovy', version: '1.5.4'
    compile group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25'
//    compile ratpack.dependency('pac4j') // Don't use this, because we need the org.pac4j version
    compile group: 'org.pac4j', name: 'ratpack-pac4j', version: '2.0.0'
    compile group: 'org.pac4j', name: 'pac4j-core', version: '2.2.1'
    compile group: 'org.pac4j', name: 'pac4j-jwt', version: '2.2.1'
    compile group: 'org.pac4j', name: 'pac4j-http', version: '2.2.1'

【问题讨论】:

    标签: java groovy ratpack www-authenticate


    【解决方案1】:

    感谢 Ratpack Slack 频道的 John Engelman,这是一个解决方法:使用 Response#beforeSend

    handlers {
      all {
        response.beforeSend { response ->
          if (response.status.code == 401) {
            response.headers.set('WWW-Authenticate', 'bearer realm="authenticated api"')
          }
        }
      }
    }
    

    请注意,此处理程序必须插入任何其他可能产生 401 响应的处理程序之前,否则触发时不会绑定回调。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-26
      • 2016-06-02
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 2021-06-07
      • 2021-03-09
      • 1970-01-01
      相关资源
      最近更新 更多