标签: spring-security-rest

Spring Boot 2.0禁用默认安全性

我想使用Spring Security进行JWT身份验证.但它带有默认身份验证.我试图禁用它,但是这样做的旧方法 - 禁用它application.properties- 在2.0中已弃用.

这是我试过的:

@Configuration
public class StackWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.httpBasic().disable();
        // http.authorizeRequests().anyRequest().permitAll(); // Also doesn't work.
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能简单地禁用基本安全性?

更新
可能很高兴知道我不使用web mvc而是web flux.

截图:
基本登录表单

spring-security spring-boot spring-security-rest spring-webflux

28
推荐指数
6
解决办法
4万
查看次数

Facebook登录JWT

我使用JWT开发了基于令牌的弹簧安全性,在git https://github.com/szerhusenBC/jwt-spring-security-demo中引用了这个项目.现在我需要在我的应用程序中登录facebook.对于社交登录,我找到了另一个网页https://ole.michelsen.dk/blog/social-signin-spa-jwt-server.html,它解释了如何进行社交登录.

在正常登录中,我的JWT项目根据用户名,密码,到期日期和创建时间创建一个令牌.每次令牌到来时,都会检索上述字段中的所有值并进行比较以验证令牌然后提供服务.我有两个问题:

  1. 在社交登录中,将不会创建密码.将从Facebook收到一个令牌(我的前端会这样做).我必须验证令牌是否有效.我怎么能在JWT中做到这一点?
  2. 根据文章验证后,我应该创建自己的令牌以供将来参考.现在,facebook登录时没有密码.如何创建令牌?

如果有任何好的网站可以在春季启动应用中使用JWT进行社交登录,请告诉我.

facebook spring-security jwt spring-security-rest

13
推荐指数
1
解决办法
5893
查看次数

springSecurityService.principal在tomcat 8.5中作为WAR部署时返回Null

前言

我正在为Grails微服务联合设计一个API网关.此问题似乎与此存储库中已提交的一系列问题有关,但没有提供解决方案.

版本和配置

Grails:3.2.2

Tomcat:8.5

插件版本:

compile 'org.grails.plugins:spring-security-core:3.1.2'
compile "org.grails.plugins:spring-security-rest:2.0.0.M2"
Run Code Online (Sandbox Code Playgroud)

我正在使用spring security rest插件进行令牌身份验证.我正在通过返回ROLE_NO_ROLES所有用户来自己做授权部分getAuthorities().我拦截所有请求并根据我自己在DB中存储的授权模式授权访问.

问题:

通过这些配置和策略,当我在本地系统上运行时,我的代码可以正常工作.当我在服务器上将其作为war文件在tomcat中部署时,它适用于所有对网关的请求,即对模式的所有请求/umm/controller/action.Spring安全上下文就在那里,用户得到了完美的评估.

当我尝试通过重定向与表单的请求调用其他微服务/umm/microservice/controller/action,springSecurityService.getCurrentUser()springSecurityService?.principal?.username开始返回null.虽然我的令牌得到了完美的评估,但我没有得到任何安全上下文.

有关详细信息,请查看此问题.上述问题中还提供了复制错误的详细信息.整个项目在这里可用.

更新:2017年5月19日

我尝试在我的本地机器上的Tomcat中部署我的战争.这个问题和这个问题提供了以下解决方案

  • 禁用tomcat缓存
  • 设置 grails.plugin.springsecurity.sch.strategyName = org.springframework.security.core.context.SecurityContextHolder.MODE_INHERITABLETHREADLOCAL

到目前为止似乎没有任何工作.无论如何都要SecurityContextHolder回来null了.所有用户检索的功能SpringSecurityService.getCurrentUser(),getPrincipal(),getAuthentication()loadCurrentUser()返回null.

更新:2017年5月23日

为了缩小问题范围,我使用了执行独立战争

java -Dgrails.env=prod -jar build/libs/mywar-0.1.war
Run Code Online (Sandbox Code Playgroud)

现在对于任何非umm请求,我得到一个404, page not found.我认为问题在于生产环境.该应用程序在开发中完全正常.

也试过grails run-app哪个工作正常.为了排除生产环境的问题,我使用grails …

spring-security tomcat8 spring-security-rest grails3

7
推荐指数
1
解决办法
442
查看次数

Spring Boot 安全中的 HTTP 403 禁止错误

Spring安全配置类

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter{

    @Autowired
    private UserDetailsService userDetailsService;

    @Bean
    public PasswordEncoder getPasswordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http
            .cors()
            .and()
            .authorizeRequests()
            .antMatchers("/user", "/login").permitAll()
            .antMatchers("/employee", "/insurance").hasRole("User")
            .anyRequest()
            .authenticated()
            .and()
            .httpBasic()
            .and()
            .csrf().disable();
    }

    protected void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(getPasswordEncoder());
    }
}
Run Code Online (Sandbox Code Playgroud)

UserDetailsS​​ervice 实现类

@Service
public class UserDetailsServiceImpl implements UserDetailsService {

    @Autowired
    private UserService userService;

    @Override
    public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException {
        User user = null;
        Set<GrantedAuthority> …
Run Code Online (Sandbox Code Playgroud)

spring spring-security basic-authentication spring-boot spring-security-rest

7
推荐指数
1
解决办法
8026
查看次数

Spring安全休息插件:身份验证失败,未找到AuthenticationProvider

我试图在我的grails应用程序中集成spring security rest插件版本1.4.1,但面对一些问题,我这样做:

Config.groovy设置:

  //login end point
    grails.plugin.springsecurity.rest.login.active=true
    grails.plugin.springsecurity.rest.login.endpointUrl='/api/login'
    grails.plugin.springsecurity.rest.login.failureStatusCode='401'

    //for  memcached
    grails.plugin.springsecurity.rest.token.storage.useMemcached=true
    grails.plugin.springsecurity.rest.token.storage.memcached.hosts='localhost:11211'
    grails.plugin.springsecurity.rest.token.storage.memcached.username=''
    grails.plugin.springsecurity.rest.token.storage.memcached.password=''
    grails.plugin.springsecurity.rest.token.storage.memcached.expiration=3600

    //logout endpoint
    grails.plugin.springsecurity.rest.logout.endpointUrl='/api/logout'
    grails.plugin.springsecurity.rest.token.validation.headerName='X-Auth-Token'

    //accept request params as map
    grails.plugin.springsecurity.rest.login.useRequestParamsCredentials=true
    grails.plugin.springsecurity.rest.login.usernamePropertyName='username'
    grails.plugin.springsecurity.rest.login.passwordPropertyName='password'
Run Code Online (Sandbox Code Playgroud)

grails.plugin.springsecurity.filterChain.chainMap = [
        '/api/guest/**': 'anonymousAuthenticationFilter,restExceptionTranslationFilter,filterInvocationInterceptor',
        '/api/**': 'JOINED_FILTERS,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter,-rememberMeAuthenticationFilter',  // Stateless chain
        '/**': 'JOINED_FILTERS,-restTokenValidationFilter,-restExceptionTranslationFilter'                                                                          // Traditional chain
]
Run Code Online (Sandbox Code Playgroud)

从设置我可以看到我正在使用Memcache进行令牌存储,当我api/login通过休息客户端点击url时,我得到了401我启用了日志,其中显示未找到身份验证提供程序

这是日志:

2015-04-03 23:30:31,030 [http-bio-8080-exec-8] DEBUG matcher.AntPathRequestMatcher  - Checking match of request : '/api/login'; against '/api/guest/**'
2015-04-03 23:30:31,031 [http-bio-8080-exec-8] DEBUG matcher.AntPathRequestMatcher  - Checking match of request : …
Run Code Online (Sandbox Code Playgroud)

rest grails spring-security access-token spring-security-rest

6
推荐指数
1
解决办法
1217
查看次数

使用Spring Security OAuth 2.0和JWT进行移动原生社交注册

我使用Spring Security OAuth 2.0和JWT为我的身份验证服务器实现了密码授予.我通过扩展AuthorizationServerConfigurerAdapter来创建服务器.我能够给服务器一个用户名/密码并获得一个JWT令牌.我使用ResourceConfiguration扩展其他服务上的ResourceServerConfigurerAdapter类,以便在进行Web服务调用时验证JWT.贴在下面是我的代码.

我想让我的Native Mobile应用程序能够使用Facebook,Gmail,Linked等登录...我想按照所附文章中的步骤操作:

https://ole.michelsen.dk/blog/social-signin-spa-jwt-server.html

  1. 用户在Mobile端进行OAuth舞蹈,并向我发送他们正在使用的社交服务的访问令牌.
  2. 我收到了访问令牌,并使用它来呼叫相应的社交服务.
  3. 如果令牌有效,则用户无法登录,则会引发错误.
  4. 如果令牌有效,我从社交服务获取用户详细信息并使用它在我的数据存储中创建一个"社交用户",该用户将绑定到现有或新的系统用户.
  5. 一旦使用社交用户创建系统用户,或者社交用户与现有系统用户绑定,JWT令牌就会被发送回移动应用程序.
  6. 此JWT令牌应类似于Spring Security OAuth 2.0密码授予流创建的JWT令牌,并且在授权用户时应由我的ResourceServerConfiguration接受.

我在网上搜索了符合我标准的解决方案,但我找不到任何解决方案.我的要求合理吗?是否有更简单的方法,允许用户通过用户名/密码和社交媒体身份验证登录,同时获取JWT令牌.我发现的一个例子使用OAuth2ClientAuthenticationProcessingFilter来执行上面提到的逻辑,但我不知道OAuth2ClientAuthenticationProcessingFilter是如何工作的,并且找不到任何文档.如果某人必须使用类似的技术堆栈实现类似的要求,请告诉我您用于实施此解决方案的技术.

在身份验证服务器上:

@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {

    @Autowired
    private AuthenticationManager authenticationManager;
    @Autowired
    private UserDetailsService userDetailsService;

    @Value("${clientId}")
    private String clientId;

    @Value("${clientSecret}")
    private String clientSecret;

    @Value("${jwtSigningKey}")
    private String jwtSigningKey;

    @Value("${accessTokenValiditySeconds}")
    private String accessTokenValiditySeconds;

    @Value("${refreshTokenValiditySeconds}")
    private String refreshTokenValiditySeconds;

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Bean
    public JwtAccessTokenConverter accessTokenConverter(){
        JwtAccessTokenConverter accessTokenConverter = new JwtAccessTokenConverter();
        accessTokenConverter.setSigningKey(jwtSigningKey);
        return accessTokenConverter;
    }

    @Bean
    public TokenStore tokenStore() …
Run Code Online (Sandbox Code Playgroud)

single-sign-on jwt spring-boot spring-security-oauth2 spring-security-rest

6
推荐指数
0
解决办法
187
查看次数

组件需要一个名为 '' 的 bean,但无法找到

我正在尝试按照这篇文章的说明使用 grails-spring-security-rest 插件构建我的第一个 grails 应用程序。

但是,当我尝试运行该应用程序时,它会给出以下输出:

| Running application...
2017-05-07 20:18:54.614  WARN --- [           main] g.p.s.SpringSecurityCoreGrailsPlugin     : 
Configuring Spring Security Core ...

Configuring Spring Security Core ...
2017-05-07 20:18:54.688  WARN --- [           main] g.p.s.SpringSecurityCoreGrailsPlugin     : ... finished configuring Spring Security Core

... finished configuring Spring Security Core


Configuring Spring Security REST 2.0.0.M2...
... finished configuring Spring Security REST

        ... with GORM support
2017-05-07 20:19:00.278 DEBUG --- [ost-startStop-1] o.s.s.w.a.i.FilterSecurityInterceptor    : Validated configuration attributes
2017-05-07 20:19:00.527 DEBUG --- [ost-startStop-1] g.p.s.r.t.g.jwt.FileRSAKeyProvider       : …
Run Code Online (Sandbox Code Playgroud)

grails groovy spring spring-security-rest

5
推荐指数
1
解决办法
5359
查看次数

Spring Boot安全考虑不区分大小写的用户名登录

我正在开发一个Spring Boot Web应用程序。问题出在登录方案中。假设我有一个用用户名“ Ali”注册的用户。该用户可以使用用户名“ Ali”或“ ali”登录。下面的代码代表了我的spring安全配置类。似乎在比较时,Spring Boot不会检查大写小写因子,但我希望对其进行检查。

软件包ir.saafta.conf;

导入ir.saafta.repo.EventRepository;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
导入org.springframework.context.annotation.Bean;
导入org.springframework.context.annotation.Configuration;
导入org.springframework.http.HttpMethod;
导入org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.session.SessionRegistry;
import org.springframework.security.core.session.SessionRegistryImpl;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.AuthenticationEntryPoint;
import org.springframework.security.web.authentication.AuthenticationFailureHandler;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler;
import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
import org.springframework.security.web.header.writers.StaticHeadersWriter;
import org.springframework.security.web.session.HttpSessionEventPublisher;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import javax.sql.DataSource;

/**
 * Created by reza on 11/12/16.
 */
@Configuration
public class SecurityConf extends WebSecurityConfigurerAdapter {

    @Autowired
    private DataSource datasource;
    @Autowired
    private EventRepository eventRepository;

    // Register …

spring spring-security spring-boot spring-security-rest

5
推荐指数
1
解决办法
1576
查看次数

如何使用 jwt 公钥在 Spring Boot 中验证承载访问令牌

我有使用客户端 ID 和密钥从 websec 生成的访问令牌。

我的项目 app.properties 有 jwt 公钥。

我正在开发 Rest api ,调用 Rest api 将提供我想使用 jwt 公钥进行验证的 Bear 令牌(生成的)。

但是Spring Security内部使用内存令牌验证器并返回无效令牌。

那么我如何使用 jwt 公钥来验证不记名令牌。

或者说我在这里缺乏一些理解。

spring spring-security spring-boot spring-security-oauth2 spring-security-rest

5
推荐指数
0
解决办法
2万
查看次数

Spring 启动安全性 - 允许用户请求使用过期的 JWT 令牌

我有一些用户正在使用有效的 JWT 令牌访问一些 API,但是因为他们的任务花费的时间比令牌过期时间长得多,当他们再次访问 API 时,JWT 令牌已经过期。他们不应该刷新他们的令牌,他们必须使用相同的令牌并使用过期的令牌访问某些 API。

我正在使用spring.security.oauth2.resourceserver与我们的授权服务器进行身份验证。

因此,我想要实现的是,如果令牌来源正确并且格式良好,即使令牌已过期,我也需要接受请求。

是的,我知道这似乎不是一个好方法,但如果可能,请教育我。

我已经ClientHttpRequestInterceptor这里阅读并深入研究了 的源代码,resource server但找不到合适的方法。

spring-security jwt spring-boot spring-security-oauth2 spring-security-rest

5
推荐指数
1
解决办法
84
查看次数