问题标签 [jakarta-ee-security-api]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
50 浏览

jakarta-ee - Jakarta MVC 框架中的身份验证和授权如何工作?

我来自 Java EE 8 开发人员。在 Java EE 8 中,我可以使用新的 Java/Jakarta EE 安全 API 来实现身份验证和授权机制(实现自定义 HttpAuthenticationMechanism、IdentityStore、IdentityStoreHandler 等)

我的问题是: 我可以为 Jakarta MVC 应用程序使用新的 Java/Jakarta EE 安全 API吗?

我查看了 Jakarta MVC 规范,我没有看到任何关于身份验证和授权的部分。

请指教!

0 投票
1 回答
319 浏览

security - Wildfly 25 JSF 安全

我完全清楚wildfly 25 已经放弃了传统的安全领域。所以我尝试从wildfly 20.0.1 迁移到wildfly 25.0.1。

根据快速入门ee-security,我做到了

我还必须在我的 jboss-web.xml 中删除值:

否则我会得到:

我也有自己的 IdentityStore。

当我尝试访问该站点时,登录页面按预期显示。当我提交凭据时,我的 IdentityStore 被调用并且 validate(Credential) 方法返回一个有效的 CredentialValidationResult。

不幸的是,我确实得到了一个异常:

我该怎么做才能让它工作?

0 投票
0 回答
114 浏览

security - Wildfly 25 快速入门 ee-security

我无法使快速入门ee-security与 Wildfly 25.0.1 一起使用。发送请求后:

我明白了:

我该怎么办 ?

0 投票
1 回答
274 浏览

java - 为什么这个来自 Soteria 的简单 Jakarta Security 示例适用于 Payara 而不适用于 WildFly?

我习惯于使用 WildFly 进行 Java/Jakarta EE 开发,最近我想将一个使用 JAAS 进行身份验证/授权的项目更新为来自 Jakarta EE 9.1 的新 Jakarta Security API。

我无法让它工作,所以我决定创建一个尽可能简单的示例并在不同的应用程序服务器上进行试验。我从Soteria中举了一个例子(据我所知,Jakarta Security 的参考实现)并创建了一个新的 Jakarta EE 项目来部署在我的应用程序服务器上。代码可在此处获得。

reza该示例为具有密码的用户提供了一个非常简单的身份存储secret1

servlet 包含自定义表单身份验证机制定义,/login.jsf如果用户未通过身份验证,则将其重定向到。通过身份验证后,它会显示用户名(主体名称)并测试用户角色。还有一个注销功能:

如果login.xhtml用户被重定向到/login.jsf

最后,一个 JSF 支持 bean 负责处理表单并调用 Jakarta Securty API 来执行身份验证:

正如我所说,它在 Payara 上按预期工作,但在 WildFly 上我得到以下异常:

请注意,我的项目不包含 Soteria 示例中的jboss-web.xml文件,但是如果我添加它,则在使用登录页面时,每次验证都会失败(即使我输入了正确的用户名和密码)。如果我http://localhost:8080/jakarta-security-example/servlet直接打开,我会得到:

如果我单击注销按钮,我会得到:jakarta.servlet.ServletException: UT010062: No SecurityContext available.

试图在谷歌上找到答案,但找不到,所以我希望 Stack Overflow 中的某个人可能知道出了什么问题并帮助我。谢谢!

0 投票
1 回答
145 浏览

java - 将 Spring Security 与 Jakarta EE 8 Security 和 JSF 集成?

在 Wildfly (Jboss) 中运行的当前应用程序使用其自己的身份验证系统,该系统在内部验证其数据库上的密码和凭据。

随着我们迁移到微服务模式,该系统在未来不再可行,因此最初需要使用 OpenId Connect 协议进行身份验证的分布式登录系统,稍后将进行授权。

使用 Spring security 和 Spring OAuth2 客户端的新 Spring boot 微服务已经很好地实现了这一点,但是将这些库与旧的 Jakarta EE 应用程序集成是一个挑战。

执行

  • 春季版 - 5.3.13
  • Spring Security 版本 - 5.5.3
  • Omnifaces 版本 - 3.11.2
  • Jakarta EE 版本 - 8
  • Wildfly 应用程序容器 - 23
  1. 现有的身份验证系统使用 Java EE HttpAuthenticationMechanism 和 AuthenticatedUser bean,其作用类似于主体。
  2. 我在 Java EE 应用程序中添加了 Spring 安全性和 OAuth2 客户端。它工作正常并将人们重定向到 AWS Cognito SSO 页面,并在他们登录后使用授权代码重定向回来。

这是一个图表,总结了当前被黑客攻击的内容

在此处输入图像描述

测试

我创建了两个带有支持 bean 的基本 JSF 页面,一个使用 web.xml 中定义的旧 Javax 安全规则进行保护,另一个使用 Spring 安全配置 bean 定义。

使用 Spring 安全页面,我可以在 bean 中获取 Security 上下文(我认为这使用 ThreadLocal)

例如 Helloworld 支持 Bean

春季安全配置

但是,如果我不使用 Spring 安全性保护该 JSF 页面,我将无法获得任何上下文。

问题

当 JSF 页面使用旧的安全方式得到保护时,它似乎走上了一条不同的路径,其中的上下文都由 CDI 管理。

我想将 Spring 安全主体集成到 JSF 应用程序的所有部分。以便 JSF 在其上下文中意识到它。

调试

在调试某些现有页面时,似乎两个 Auth 系统都已激活,但存在分歧并且彼此不了解。

解决方案?

作为一个被弹簧靴自动配置的奢华宠坏的人,我有点不知道该怎么做。

只需覆盖一个类,或者:

  • 我是否需要淘汰使用 Java EE 规范的旧身份验证系统?
  • 我是否覆盖了 Spring 安全性的某些部分,以便它知道 Java EE 和 JSF?
  • 是否需要将 JSF 配置为与 Spring 安全性通信?
  • Wildfly 应用程序服务器中是否有更高级别的抽象需要配置?

tl;博士

在 Jakarta EE 应用程序中,如何让 Spring 安全将其安全上下文传递给 JSF?

谢谢