问题标签 [jaspic]
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.
jakarta-ee - AuthenticationStatus 在使用自定义表单和基本身份存储时返回 NOT_DONE
@CustomFormAuthenticationMechanismDefinition
我花了几天时间将自己更新到 Java EE 8,我在使用和@DatabaseIdentityStoreDefinition
一起使用时遇到了一个问题。
我正在使用 Glassfish v5、NetBeans 9 nightly 和 Java 8。
我所做的只是想更新security-soteria(Java EE Security 1.0 RI)测试文件夹中的app-mem-customform 示例,而我所做的更改是用于替换基于内存的 dummy 。@DatabaseIdentityStoreDefinition
IdentityStore
当我启动应用程序并尝试登录时,从 NetBeans 控制台获得了以下信息。
信息:身份验证结果: 来自我的未完成LoginBean
,打印返回的 AuthenticationStatus
.
我的安全配置文件是:
我还包括DatabaseSetup
在应用程序启动时插入用户。该文件是从app-db sample复制的。
我的完整代码可以在这里找到。
@CustomFormAuthenticationMechanismDefinition
在项目中使用和@DatabaseIdentityStoreDefinition
无缝的正确方法是什么?
更新,我刚刚尝试使用@FormAuthenticationMechanismDefinition
,@DatabaseIdentityStoreDefinition
它有效,代码在这里。所以这是一个错误@CustomFormAuthenticationMechanismDefinition
。
jakarta-ee - 使用 JASPIC 进行身份验证时,web.xml 在身份验证方面是否仍然相关?
自从我完成 JASPIC 工作以来,已经过了很长时间了。
我有一个web.xml
看起来像这样的:
我还设置并安装了服务器身份验证模块 (SAM)。在我的glassfish-web.xml
喜欢中提到过:
我的 SAM 工作正常。
事实上,它的效果有点太好了!它正在拦截所有请求,而不仅仅是由<url-pattern>
of标识的请求/v2/*
。这最初让我感到惊讶。
但是当我仔细考虑这一点时,我认为这有一定的意义:SAM 现在负责身份验证,而不是容器,真的。
那么web.xml
现在本质上是无关紧要的吗?
然后我想了更多,很明显它是相关的,因为它的内容也说明了身份验证发生后要做什么,即如果用户通过 SAM 成功验证,现在检查她是否具有emcc
角色。如果她没有,并且大概请求以 开头/v2/
,那么我们将她赶出去。如果她不这样做,并且大概是从其他任何内容开始请求,那么我们就让她进来。
那么,我的 SAM 必须自行有效地决定传入的请求是否值得验证,这是预期的行为吗? 我希望我的 SAM 会“正常”触发,即仅当有人尝试访问需要身份验证的 URI 时,如<security-constraint>
.
可能值得注意的是,唯一起作用的 servlet 是当 JAX-RSApplication
类使用@ApplicationPath("/v2")
.
java - 如何创建会话范围的 bean?
我想知道如何创建一个可以在所有用户请求中使用的用户会话对象。用户可以在登录后选择配置文件,因此我需要使用此配置文件数据更新该会话对象。
它是如何完成的?如何初始化会话范围的 bean?以后如何更改该 SessionScoped bean 中的对象(有必要记住他的会话中的一些用户操作)。
如果你能在这件事上帮助我,我会很高兴:)
我通过在从 HttpServletRequest 获得的会话上调用 logout() 和 invalidate() 来使会话无效。
我正在像这样注入用户主体。每个用户会话的对象应该是相同的
jakarta-ee - JBoss EAP 7 的 EJB 层不支持 JASPIC 身份验证
我有一个 EAR,其中包含一个 WAR。为 EAR(在 jboss-app.xml 内)配置一个基于 JAAS 的安全域,为 WAR(在 jboss-web.xml 内)配置一个基于 JASPIC 的安全域。EAR 包含我想使用 JAAS 保护的 EJB。最近添加了 WAR,以便为我实现了 JASPIC 机制的 EJB 提供 JAX-RS 端点。此设置在 Weblogic 12c 中按预期工作,但在 JBoss EAP 中出现以下错误。
我认为,即使 JASPIC 身份验证成功,SecurityContextInterceptor 也无法识别它或没有获得正确的主体。此外,调试时出现的一个重要观察结果是,我的 JAAS 登录模块被调用并失败,因为它无法使用凭据。
EAR 中使用的 Jboss 描述符如下所示。
jboss-app.xml
jboss-web.xml
我已经尝试过在 SAM 中提到的解决方法 @Jaspic 模块没有将主体传播到 JBoss 7.4 中的本地 EJB,但它没有任何区别。非常感谢任何有关调试和修复此问题的帮助。
jakarta-ee - JASPIC ServerAuthModule 中的 CDI 注入不起作用
在 Java 10 上使用 Wildfly 11 Final。
我有 JASPIC 实现,它本身就可以正常工作。我需要将它连接到数据库,以便我可以在public AuthStatus validateRequest(MessageInfo messageInfo, Subject clientSubject, Subject serviceSubject) throws AuthException {...}
. 然而@Resource(mappedName="java:jboss/datasources/someDB") javax.sql.DataSource db;
总是null
为db
。
对于同一 WAR 存档中的任意 Servlet 类,CDI 按预期工作 - 如果我将确切的行放在 Servlet 类中,它会给出一个DataSource
对象。
我通过手动查找来解决这个问题,private static InitialContext ic;
但我需要 CDI 来处理其他全局事务。有没有人遇到过这样的问题?在元素中WEB-INF/beans.xml
有一个bean-discovery-mode="all"
属性。beans
security - Thorntail MP JWT / Undertow:需要身份验证
我正在尝试使用 JWT 身份验证在 thorntail 中设置 JAX-RS 服务。一切正常(我可以注入Principal
并且用户设置正确),除了在身份验证失败的情况下,仍然在没有任何 401-HTTP-Header 的情况下发送答案。我所做的是:
- 添加
@LoginConfig(authMethod = "MP-JWT", realmName = "my-domain")
到我的Application
-Class 配置安全域
/li>配置 JWT 特定的东西(似乎工作,所以我在这里跳过)
我还需要做什么才能使其正常工作?我需要向我的端点添加任何注释吗?正如我所说,我想在身份验证失败的情况下返回 401。
到目前为止我发现的是:JASPICAuthenticationMechanism.isMandatory
需要返回 true 才能使其正常工作。如果是这种情况JWTAuthMechanism.sendChallenge
,则在失败后触发JWTAuthMechanism.authenticate
,因此向客户端发送 401。但我不知道,在哪种情况下isMandatory
返回 true。
感谢您在这种情况下的任何帮助!
security - HttpAuthenticationMechanism 是可分发的吗?
我有简单的问题。
我们有一个带有 HttpAuthenticationMechanism 的 JSF 应用程序。
凭证是否可分发?
我的意思是如果放入 web.xml<distributable/>
并在 2 个节点(wildfly)上部署应用程序是从节点分发到节点的凭据?
提前致谢。
jakarta-ee - javax.ejb.EJBAccessException 使用 CustomAuthMechanism 登录后用户无效,但我有权访问 page.xhtml
环境:
- 老板 7.2
- 爪哇 11
通过 CustomAuthenticationMechanism 登录后,我尝试使用 @RolesAllowed 调用方法 CompanyService.findFirst() 但似乎 EJBContainer 不知道我的权限。我加载了显示我有角色 AF_ADMIN 的页面 login-private.xhtml 但是当我调用 findFirst() 我得到 javax.ejb.EJBAccessException: WFLYSEC0027: Invalid User
我应该授予或告诉 EJB 身份验证权限吗?
我错过了什么吗?
jboss-web.xml
公司服务
自定义身份验证机制
login-private.xhtml显示我有 AF_ADMIN
servlets - SecurityContext#authenticate(...) 和 HttpServletRequest#login/authenticate 有什么区别?
我正在使用 TomEE 8.0.8 WebProfile。我试图找出在我的 webapp 中实现身份验证和授权的最佳方法。我正在使用 Java Servlet。
正如标题所说,我想知道javax.security.enterprise.SecurityContext#authenticate(...)
and HttpServletRequest#login
/之间的区别HttpServletRequest#authenticate
。
我很难理解如何在我的 webapp 中干净地应用身份验证机制,而且这种相似性根本没有帮助:我尝试实现 aHttpCustomImplementationMechanism
但显然它没有被HttpServletRequest
方法触发;此外,SecurityContext
无法注销,所以我不知道如何在我的网络应用程序中应用注销机制。
注意:这个问题指的是javax.ws.rs.core.SecurityContext
,不是同一个界面
java - 使用 CustomFormAuthenticationMechanism 使登录页面正常工作,而无需访问受限资源
我正在使用 TomEE 8.0.8 网络配置文件。这是一个最小的例子:
保留页面(仅限经过身份验证的用户)
如果我以未经身份验证的用户身份进入“/protected”,Web 服务器会将我重定向到登录页面,我可以在其中提交我的凭据,然后重定向到我想查看的页面。这按预期工作。
问题在于我只想登录而不访问任何受保护的资源:如果我转到“/login”并提交我的凭据,它们将不会保存在会话中。事实上,如果我尝试打开“/protected”,它仍然表现得好像还没有进行身份验证。
可能是什么问题?JSR 375 谈论“processCallerInitiatedAuthentication”和“processContainerInitiatedAuthentication”,涉及newAuthentication
参数,但我无法让它工作。
更新:securityContext.authenticate(req, resp, authparams)
如果由受保护的资源或登录页面本身调用,调用似乎具有相似的结果:Principal
保存在请求中而不是会话中。
实际的区别在于,TomEE 过滤器(我猜是 s)调用之后 ,进入一个特定的 if 分支(第 902 行),在那里检查前面提到的内容,然后将身份验证状态保存在会话中。这仅在尝试访问受限资源后登录时才会发生。LoginServlet#doGet
OpenEJBSecurityListener$RequestCapture
AuthenticatorBase#authenticateJaspic
Principal
现在我将制作一个虚拟保护页面来模拟调用者发起的身份验证过程,但我想知道在这方面还可以做些什么。
更新 2:这里是org.apache.catalina.authenticator.AuthenticatorBase
.
如果我访问受保护的资源
如果我直接访问登录页面