0

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

all RatpackPac4j.requireAuth(HeaderClient)

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

我在此处的 RatpackPac4j 跟踪器上提出了一个问题,但由于 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'
4

1 回答 1

0

感谢 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 响应的处理程序之前,否则在触发它们时将不会绑定回调。

于 2018-06-19T10:45:24.903 回答