我正在为Angular 5应用程序创建API。我希望使用JWT进行身份验证。
我希望使用spring security提供的特性,以便能够轻松地处理角色。
我只想在返回JWT令牌的控制器中进行的登录。但是我应该使用什么Spring Securitybean来检查用户凭据呢?我可以构建自己的服务和存储库,但我希望尽可能使用spring security提供的特性。
这个问题的简短版本只是:
我如何自定义spring Security的身份验证?
我必须创建哪些bean?
我必须将配置放在哪里?(我现在有一个SecurityWebFilterChain
bean)
关于使用spring security在webflux中进行身份验证的唯一文档是:https://docs.spring.io/spring-security/site/docs/5.0.0.build-snapshot/reference/htmlsingle/#jc-webflux
经过大量的搜索和尝试,我想我找到了解决办法:
您需要包含所有配置的SecurityWebFilterChain
bean。
这是我的:
@Configuration
public class SecurityConfiguration {
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
private SecurityContextRepository securityContextRepository;
@Bean
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
// Disable default security.
http.httpBasic().disable();
http.formLogin().disable();
http.csrf().disable();
http.logout().disable();
// Add custom security.
http.authenticationManager(this.authenticationManager);
http.securityContextRepository(this.securityContextRepository);
// Disable authentication for `/auth/**` routes.
http.authorizeExchange().pathMatchers("/auth/**").permitAll();
http.authorizeExchange().anyExchange().authenticated();
return http.build();
}
}
我已经禁用了httpBasic、formLogin、csrf和logout,以便可以进行自定义身份验证。
通过设置authenticationManager
和securitycontextrepository
,我覆盖了默认的Spring Security配置,用于检查用户是否通过了请求的身份验证/授权。
身份验证管理器:
@Component
public class AuthenticationManager implements ReactiveAuthenticationManager {
@Override
public Mono<Authentication> authenticate(Authentication authentication) {
// JwtAuthenticationToken is my custom token.
if (authentication instanceof JwtAuthenticationToken) {
authentication.setAuthenticated(true);
}
return Mono.just(authentication);
}
}
我不完全确定身份验证管理器的用途,但我认为是为了进行最终身份验证,因此在一切都正确时设置authentication.setauthenticated(true);
。
安全ContextRepository:
@Component
public class SecurityContextRepository implements ServerSecurityContextRepository {
@Override
public Mono<Void> save(ServerWebExchange serverWebExchange, SecurityContext securityContext) {
// Don't know yet where this is for.
return null;
}
@Override
public Mono<SecurityContext> load(ServerWebExchange serverWebExchange) {
// JwtAuthenticationToken and GuestAuthenticationToken are custom Authentication tokens.
Authentication authentication = (/* check if authenticated based on headers in serverWebExchange */) ?
new JwtAuthenticationToken(...) :
new GuestAuthenticationToken();
return new SecurityContextImpl(authentication);
}
}
在加载中,我将根据ServerWebExchange
中的头检查用户是否通过了身份验证。我使用https://github.com/jwtk/jjwt。如果用户是否通过了身份验证,我将返回不同类型的身份验证令牌。
问题内容: 我正在为Angular 5应用程序创建API。我想使用JWT进行身份验证。 我想使用Spring Security提供的功能,以便我可以轻松地使用角色。 我设法禁用基本身份验证。但是使用时我仍然会收到登录提示。 我只想输入403而不是提示。因此,通过检查令牌标题的“事物”(是否是过滤器?)来覆盖登录提示。 我只想在将返回JWT令牌的控制器中进行登录。但是我应该使用哪种Spring Se
我们有一个Spring5,非SpringBoot应用程序,使用Springfox 2.9.2 Swagger UI。 我不知道如何保护 /api-docsendpoint:我希望它每次访问时都调用我的身份验证函数。我让它为swagger-ui.html工作,但没有成功 /api-docs.这是我得到的。 另一种选择是永久关闭对 /api-docs 的访问,只需直接调用从某个新终结点生成 JSON
问题内容: 这是我的情况: 一个Web应用程序对许多应用程序执行某种SSO 登录的用户,而不是单击链接,该应用就会向正确的应用发布包含用户信息(名称,pwd [无用],角色)的帖子 我正在其中一个应用程序上实现SpringSecurity以从其功能中受益(会话中的权限,其类提供的方法等) 因此,我需要开发一个 自定义过滤器 -我猜想-能够从请求中检索用户信息,通过自定义 DetailsUserSe
问题内容: 我可以使用Google帐户在AppEngine中对用户进行身份验证的方式非常好。 但是,我需要使用 自定义的身份验证登录系统 。 我将有一个AppUsers表,其中包含用户名和加密密码。 我阅读了有关gae会话的内容,但在启动应用安全性方面需要帮助。 如何跟踪经过身份验证的用户会话?设置cookie? 初学者。 问题答案: 您可以使用cookie来做到这一点……其实并不难。您可以使用C
我在spring MVC项目中实现了一个自定义身份验证提供程序。在我自己的重载authenticate()方法中,我实现了自己的身份验证,其中我构造了自己的UserPasswordAuthenticationToken()并返回对象。 现在,上述对象“UserPasswordAuthentictionToken”中的用户ID被匿名化,密码为null,权限设置为授予该用户的权限。 问题: 这是否会导
对于我的应用程序,我希望结合对称加密实现HTTP基本身份验证。base64编码的用户名和密码在发送时使用加密密钥加密,在REST API接收时使用相同的密钥解密。 在spring调用身份验证之前,从头中检索加密的字符串。 使用加密密钥解密字符串 将解密的信息保存在标头中 使用新头调用身份验证(现在包含base64编码的用户名+密码) 我在正确的轨道上吗?如果是的话,我该如何在Spring中实现它呢