Spring 和 Angular 前端中的 Kerberos Spnego + JWT

Kerberos Spnego in Spring and Angular frontend + JWT

我的主要目标是首先进行 Kerberos 身份验证,如果它失败,则有一个 Angular 的表单页面,该页面将 post 和 username/password 发送到 /users/login .

我在 Spring 中配置了很多 as follow 并且已经进行了 login/password 身份验证,发送回 JWT,前端有守卫。前端在 Spring.

的资源文件夹中提供

Kerberos 似乎不弹出 up/auto 日志。有什么具体要做的吗?

Kerberos 登录后创建过滤器是否是在前端处理身份验证的正确方法?

因为我的 Spnego 配置使用 SpnegoEntryPoint("/#/login") and/or Spring 安全性使用 .formLogin().loginPage("/#/login").permitAll() 并且因为 Spnego 使用 Forward 而不是 Redirect,他找不到页面服务器端并抛出 404 而不是 401。

401 是触发 Kerberos 身份验证以及 header WWW-Authorization: Negotiate 的原因。因此,由于它抛出 404,它从未启动 Kerberos 身份验证。

因此,我将 /#/login 都更改为 /index.html/ 可能会起作用)。

然后,Angular 端(在 app.component.ts 中),我在安全端点 /connect 上触发了一个 API 调用,我的 CustomAuthenticationSuccessHandler.java 注册到我的过滤器只需在 header Authorization : Bearer

中用 JWT 令牌装饰 header
UserDetails authUser = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
httpServletResponse.addHeader(SecurityConstants.HEADER_STRING,
                SecurityConstants.TOKEN_PREFIX + TokenUtil.generateToken(authUser));

然后我简单地获取 header,将其存储在 LocalStorage 中,将用户重定向到该页面。