问题标签 [pre-authentication]

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 回答
694 浏览

java - Spring-MVC:@PreAuthorize 不起作用

我正在开发一个 Spring-MVC 应用程序,在对代码配置进行一些更改后,我注意到 @PreAuthorize 家伙不再工作了。之前如果我尝试访问任何使用 preAuthorize 注释的控制器方法,我会被抛出登录,但现在该方法正在执行。谁能告诉我我做错了什么。我尝试了网上提到的解决方案,它们似乎都没有帮助我。非常感谢。

Servlet-context.xml ;:

根上下文.xml:

安全-applicationContext.xml :

我做错了什么。你能帮忙的话,我会很高兴。如果需要更多信息,请告诉我。

0 投票
1 回答
1341 浏览

java - 带有 PreAuthenticationFilter 的 Spring Security AnonymousAuthFilter 允许未经授权的请求

我的 Spring MVC Web 应用程序中有一个相当简单的 Spring Security 配置。我正在接收来自远程 Web 应用程序的 REST 请求,这些请求通过我的 preauth 过滤器进行了身份验证。我只是在请求中查找标头,如果存在,我返回该字符串值(即用户名)作为身份验证对象。这工作正常,当请求进来时,用户会得到身份验证。

无论出于何种原因,每当我尝试强制执行基于模式的安全性 antMatcher 或控制器方法注释的安全性时,都会导致客户端收到 CORS 错误。我必须保持访问完全开放,以允许在这个跨域环境中进行实际请求。

我的问题是,一段时间后,会话似乎到期了。当用户点击我的一个控制器并尝试从 Principal 对象中获取用户名时,我会收到 NullPointerException,因为 Principal 为空。一旦它过期,它看起来像 AnonymousAuthFilter 启动并让用户以匿名方式连接。

我假设我不想要一个完全无状态的身份验证会话,因为我也在使用 websockets 的会话,当我使用我的消息传递模板来“convertAndSendToUser”时,我需要提供用户名和 Spring 需要查找网络套接字会话。但是,我想强制安全链识别传入请求是否没有分配主体,以通过我的 PreAuthFilter 强制请求返回并重新建立会话。

这可能吗?

以下是我的安全配置文件中配置方法的简要说明:

更新:所以我刚刚在 http 对象上了解了这个方法:

但是,当我使用它时,我所有的 CORS 请求都会再次失败。我认为这个问题特别是预检 OPTIONS 请求。这不能被验证——它需要匿名访问。因此,我认为要从跨域身份验证中获得我想要的行为,我需要禁用匿名过滤器,但这样做会破坏能够执行跨域请求的关键租户之一。啊。有人知道如何为除 OPTIONS 之外的所有请求禁用匿名吗?

0 投票
1 回答
1216 浏览

spring-mvc - 为什么 SpringSecurity 不将我的 SecurityContext 放在 HttpSession 中?

我的公司 Intranet 应用程序使用预身份验证方案。它在 SpringSecurity 过滤器链之前插入了两个过滤器。第一个是公司提供的过滤器。它处理所有登录名、密码等,如果它识别出用户,则将身份验证数据放入 cookie 中的 Principal 中。第二个翻译所有这些,创建 UserDetails 对象和一个身份验证令牌并将其放置在 SecurityContextHolder 中。

我的日志确认正在发生这种情况:

几毫秒后,Spring Security 过滤器链进来并执行以下操作:

基本上,HttpSessionSecurityContextRespositorySecurityContextPersistenceFilter(过滤器链的一部分)调用并检查 SESSION 的安全上下文,在会话中找不到一个,并将我刚刚放在 SecurityContextHolder 中的上下文替换为一个新的空上下文,从而进行身份验证下面几行失败。

由于 Spring 文档没有提到HttpSessionSecurityContextRespository,我想我可能不应该对此感到困惑。

相反,我想也许我可以尝试在 Spring Security Filter 链之后插入第二个过滤器,但这并没有帮助。FilterSecurityInterceptor(链中的第 11 项)拒绝对我进行身份验证,就像我的第二个过滤器在链上它之前一样。

什么会在会话中保存 SecurityContext 以及如何在清除我刚刚设置的安全上下文时击败 SecurityContextPersistenceFilter 的行为?

0 投票
1 回答
2923 浏览

spring - 使用多个 AuthenticationProvider 时如何从 PreAuthenticatedAuthenticationProvider 重定向 UsernameNotFoundException?

使用 Spring Security 4.02,任何人都可以提供一些提示,说明我在使用多个时如何处理UsernameNotFoundException,以便将带有正确标头但未经授权的经过身份验证的请求发送到特定的 URL,而不是表单登录页面?PreAuthenticatedAuthenticationProviderAuthenticationProviders

让我进一步解释一下我在访问受 SSO 保护的代理背后的 Web 应用程序时要完成的工作。并非所有通过 SSO 身份验证的用户都可以访问此应用程序。所以我需要考虑3种访问场景:

  1. 经过身份验证的用户(存在标头)已授权(用户名/角色存在于应用程序的数据库中)
  2. 经过身份验证的用户(存在标头)未经授权(用户名/角色存在于应用程序的数据库中)
  3. 应用程序数据库中存在用户名/角色的未经身份验证的用户

访问网站时的操作应该是:

  1. 经过身份验证/授权的用户直接进入目标 URL
  2. 经过身份验证/未经授权的用户被重定向到错误/信息页面
  3. 未经身份验证的用户被重定向到表单登录页面进行身份验证

使用我当前的配置,场景 1 和 3 似乎可以正常工作。对于场景 2,我尝试设置RequestHeaderAuthenticationFilter#setExceptionIfHeaderMissing为 true 和 false。

如果setExceptionIfHeaderMissing=false,已验证/未授权的请求由ExceptionTranslationFilterwhereAccessDeniedException被抛出,并且用户被重定向到表单登录页面。

如果setExceptionIfHeaderMissing=true,则遇到经过身份验证/未经授权的请求PreAuthenticatedCredentialsNotFoundExceptionAbstractPreAuthenticatedProcessingFilter.doAuthenticate并返回 HTTP 500。

因此,我已经阅读并重新阅读了 Spring Security 参考和 api 文档,并在网上搜索,只是无法完全弄清楚我需要做什么。我想我需要启用某种过滤器或处理程序来捕获PreAuthenticatedCredentialsNotFoundException重定向响应。但我似乎无法用所有可用的弹簧工具来实现它。有人可以提供一些细节吗?提前谢谢了!!

这是我的配置:

我自定义的 UserDetailsS​​ervice:

0 投票
1 回答
2792 浏览

spring - Spring Security 中的 @PreAuthorize 注释不起作用。可能是配置错误的 .xml 文件

我正在将 Spring Security(Spring Boot 应用程序)与 AngularJS 一起使用,并且我正在尝试根据用户授予的权限来允许/拒绝对特定映射的访问。

用户.java

另外,我有自己的UserDetailsService(method loadUserByUsername(String username)) 实现,它使用数据库中的数据填充用户数据。

前面提到的映射是:

用户确实有权限“10001”,但没有权限“00000”,/yes应该允许访问,但/no不应该访问。不幸的是,这两条路径都是允许的。

我有这里spring-security-config提到的 Maven 依赖。

我的 WEB-INF/web.xml

和 WEB-INF/security.xml

所以,总结一下: UserDetailsS​​ervice 实现工作(我可以使用用户凭据登录并记录器打印授予的权限,所以我知道他们在那里),但是用户可以访问这两个路径,yes/no实际上他/她不应该能够访问/no,因为他/她没有权限(许可)“00000”。

也许我的 xml 配置不正确或根本没有被读取。

谢谢你的时间

更新正如 M. Deinum 在评论中所说,Spring Boot 忽略了 web.xml 和 security.xml 文件。解决方案是修改SecurityConfigurationwhich extendsWebSecurityConfigurerAdapter并添加具有相应权限的相应 antMatchers。

例子:

0 投票
2 回答
1462 浏览

spring - Spring Security 预认证/登录

我使用 Spring Security 进行了概念验证,以便使用 PRE_AUTH_FILTER 过滤器执行预身份验证。它工作正常,但我想知道如果这个过滤器不起作用,我是否可以重定向到登录页面,因为我得到 HTTP 403。
我的意思是,如果初始请求不包含标头中的 SM_USER 字段,如何重定向到登录页面?我需要考虑这两种情况(当它包含字段 - SM_USER - 时,当不包含时)并且我无法让它工作。有什么想法吗?

0 投票
2 回答
10216 浏览

spring - 使用带有 keycloak 的 spring 安全注释

我只是 Spring Security 的初学者,但我想知道是否可以以我可以使用 、 和其他注释的方式@PreAuthorize配置@PostAuthorizekeycloak @Secured。例如,我keycloak-spring-security-adapter在我的简单 Spring Rest webapp 中配置了 Spring Security,以便我可以访问控制器中的 Principal 对象,如下所示:

但是当我尝试这个时(只是一个例子,实际上我想在授权之前执行自定义 EL 表达式):

我得到例外:

org.springframework.security.authentication.AuthenticationCredentialsNotFoundException:在 SecurityContext 中找不到 Authentication 对象

在我的 spring 安全配置中,我启用了全局方法安全性:

我需要什么才能使这个 Spring 安全注释起作用?是否可以在这种情况下使用此注释?

0 投票
0 回答
539 浏览

spring-mvc - 如果春季预认证成功,如何绕过表单登录过滤器?

如果预认证过滤器成功从请求中提取用户信息,是否可以绕过表单登录过滤器?表单登录过滤器将用作后备,以防传入的请求未经过预先身份验证。

我正在开发一个 spring mvc 应用程序,该应用程序具有一个标准登录页面,其中包含两个自定义过滤器和一个如下定义的身份验证提供程序:

我添加了第三个过滤器和另一个提供程序来处理预认证请求:

但是,即使预身份验证提供程序显式将身份验证标志设置为 true,也会调用登录表单过滤器: auth.setAuthenticated(true);

0 投票
3 回答
712 浏览

java - spring security : 进行 mysql 身份验证

我对 Spring Security 有疑问。

我正在尝试使用 mysql 数据检查进行身份验证。我正在使用 AngularJs、Spring Boot 和 Spring Security。

我有一个由 $http.post(...) 调用的 webservice rest。当我启动我的应用程序时,如果我使用 chrome 插件“Advanced Rest Client”>“ http://localhost:8080/check-login ”测试我的 web 服务;它有效,我收到代码 200:OK。

但是,如果我想通过 Chrome 使用相同的 URL 访问我的网络服务。带有身份验证功能的窗口。我认为这是 Spring Security 的预认证。但我不知道如何禁用它。

这是一个问题,因为当我想用浏览器访问 Web 服务时,它说:“ http://localhost:8080/check-login 401 unauthaurized”

编辑:这是我的代码:

HTML:

JS:

我的 Java 休息:

我的 Java Spring Boot 和安全配置:

最后,我的关于 UserDetailsS​​ervice 的 Java

你有想法吗 ?谢谢

0 投票
0 回答
128 浏览

spring - 单点登录预认证过滤器后未点击默认页面(Apache+Tomcat+SpringSecurity)

我在 tomcat 上部署了一个正在运行的 Spring Web 应用程序,使用 Spring Security 进行身份验证和授权。我的新要求是通过 apache http 请求向 tomcat 使用 SSO。

我使用预身份验证过滤器完成了这项工作,并通过 LDAP 服务器(MS AD)获得了授权。问题是默认页面没有自动打开。当我输入像http://localhost/postLogin.sp这样的 URl 时,它正在工作。这是security.xml

我注释掉 , 因为使用 ssoPreAuthenticationFilter 作为预认证过滤器。但是在哪里可以设置这个默认页面“postLogin.sp”。authentication-success-handler-ref 是 的一部分,因此在这里没有用处。

我的欢迎文件列表配置如下

所以请帮忙。