java - 为什么我的 Spring OAuth2 服务器无法使用 SSL 自签名 ssl?

标签 java spring ssl oauth spring-boot

我在我的应用程序上使用 OAuth 2.0。我有 2 个使用 Spring Boot 开发的应用程序,一个使用 url https://192.168.1.30:2999/autenticador 进行身份验证第二,客户,https://192.168.1.30:2901/ .

当我使用没有 SSL 的服务器(http://192.168.1.30:2999/autenticadorhttps://192.168.1.30:2901/)时,授权成功。但是,当我使用自签名证书时出现问题,返回错误 401,未授权,身份验证失败:无法获取访问 token 。我不知道它是如何发生的以及为什么会发生。

观察:证书在我的计算机上注册得像受信任的,然后我看到地址栏是绿色的。

客户端:

@SpringBootApplication
@EnableOAuth2Sso
public class Application {
    public static void main(String[] args) throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException {
        SpringApplication.run(Application.class, args);
    }
}

服务器上的 OAuth 2.0 配置:

@Configuration
@EnableAuthorizationServer
public class OAuthConfiguration extends AuthorizationServerConfigurerAdapter{
    @Autowired
    private AuthenticationManager authenticationManager;

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
         endpoints.authenticationManager(authenticationManager);
    }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.inMemory()
        .withClient("client")
        .authorizedGrantTypes("authorization_code")
        .scopes("read", "trust")
        .resourceIds("RESOURCE_ID")
        .secret("secret");
    }
}

这是客户端在服务器上登录成功后的日志:

  2016-06-06 16:47:27.376  DEBUG  [nio-2901-exec-4]  o.s.security.web.FilterChainProxy          / at position 1 of 12 in additional filter chain; firing Filter: 'WebAsyncManagerIntegrationFilter'
  2016-06-06 16:47:27.377  DEBUG  [nio-2901-exec-4]  o.s.security.web.FilterChainProxy          / at position 2 of 12 in additional filter chain; firing Filter: 'SecurityContextPersistenceFilter'
  2016-06-06 16:47:27.378  DEBUG  [nio-2901-exec-4]  w.c.HttpSessionSecurityContextRepository   No HttpSession currently exists
  2016-06-06 16:47:27.378  DEBUG  [nio-2901-exec-4]  w.c.HttpSessionSecurityContextRepository   No SecurityContext was available from the HttpSession: null. A new one will be created.
  2016-06-06 16:47:27.381  DEBUG  [nio-2901-exec-4]  o.s.security.web.FilterChainProxy          / at position 3 of 12 in additional filter chain; firing Filter: 'HeaderWriterFilter'
  2016-06-06 16:47:27.382  DEBUG  [nio-2901-exec-4]  o.s.security.web.FilterChainProxy          / at position 4 of 12 in additional filter chain; firing Filter: 'CsrfFilter'
  2016-06-06 16:47:27.383  DEBUG  [nio-2901-exec-4]  o.s.security.web.FilterChainProxy          / at position 5 of 12 in additional filter chain; firing Filter: 'LogoutFilter'
  2016-06-06 16:47:27.383  DEBUG  [nio-2901-exec-4]  o.s.s.w.u.matcher.AntPathRequestMatcher    Request 'GET /' doesn't match 'POST /logout
  2016-06-06 16:47:27.383  DEBUG  [nio-2901-exec-4]  o.s.security.web.FilterChainProxy          / at position 6 of 12 in additional filter chain; firing Filter: 'OAuth2ClientAuthenticationProcessingFilter'
  2016-06-06 16:47:27.384  DEBUG  [nio-2901-exec-4]  o.s.s.w.u.matcher.AntPathRequestMatcher    Checking match of request : '/'; against '/login'
  2016-06-06 16:47:27.384  DEBUG  [nio-2901-exec-4]  o.s.security.web.FilterChainProxy          / at position 7 of 12 in additional filter chain; firing Filter: 'RequestCacheAwareFilter'
  2016-06-06 16:47:27.384  DEBUG  [nio-2901-exec-4]  o.s.security.web.FilterChainProxy          / at position 8 of 12 in additional filter chain; firing Filter: 'SecurityContextHolderAwareRequestFilter'
  2016-06-06 16:47:27.386  DEBUG  [nio-2901-exec-4]  o.s.security.web.FilterChainProxy          / at position 9 of 12 in additional filter chain; firing Filter: 'AnonymousAuthenticationFilter'
  2016-06-06 16:47:27.389  DEBUG  [nio-2901-exec-4]  o.s.s.w.a.AnonymousAuthenticationFilter    Populated SecurityContextHolder with anonymous token: 'org.springframework.security.authentication.AnonymousAuthenticationToken@9055e4a6: Principal: anonymousUser; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@957e: RemoteIpAddress: 192.168.1.30; SessionId: null; Granted Authorities: ROLE_ANONYMOUS'
  2016-06-06 16:47:27.389  DEBUG  [nio-2901-exec-4]  o.s.security.web.FilterChainProxy          / at position 10 of 12 in additional filter chain; firing Filter: 'SessionManagementFilter'
  2016-06-06 16:47:27.389  DEBUG  [nio-2901-exec-4]  o.s.s.w.session.SessionManagementFilter    Requested session ID CBA2CC9F09D613F91D95FD4764E48A50 is invalid.
  2016-06-06 16:47:27.389  DEBUG  [nio-2901-exec-4]  o.s.security.web.FilterChainProxy          / at position 11 of 12 in additional filter chain; firing Filter: 'ExceptionTranslationFilter'
  2016-06-06 16:47:27.389  DEBUG  [nio-2901-exec-4]  o.s.security.web.FilterChainProxy          / at position 12 of 12 in additional filter chain; firing Filter: 'FilterSecurityInterceptor'
  2016-06-06 16:47:27.390  DEBUG  [nio-2901-exec-4]  o.s.s.w.a.i.FilterSecurityInterceptor      Secure object: FilterInvocation: URL: /; Attributes: [authenticated]
  2016-06-06 16:47:27.390  DEBUG  [nio-2901-exec-4]  o.s.s.w.a.i.FilterSecurityInterceptor      Previously Authenticated: org.springframework.security.authentication.AnonymousAuthenticationToken@9055e4a6: Principal: anonymousUser; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@957e: RemoteIpAddress: 192.168.1.30; SessionId: null; Granted Authorities: ROLE_ANONYMOUS
  2016-06-06 16:47:27.399  DEBUG  [nio-2901-exec-4]  o.s.s.access.vote.AffirmativeBased         Voter: org.springframework.security.web.access.expression.WebExpressionVoter@3fcae110, returned: -1
  2016-06-06 16:47:27.404  DEBUG  [nio-2901-exec-4]  o.s.s.w.a.ExceptionTranslationFilter       Access is denied (user is anonymous); redirecting to authentication entry point

org.springframework.security.access.AccessDeniedException: Access is denied

最佳答案

你能检查“spring-security.xml”中的配置,看看'requires-channel'属性设置为https而不是http? 如果不行,全部设置成https试试。

有关此问题的更多信息,请参见此处。 http://docs.spring.io/spring-security/site/faq/faq.html#faq-tomcat-https-session

示例:

    <intercept-url pattern="/login.html" access="hasRole('ROLE_ANONYMOUS')" requires-channel="https"/>
    <intercept-url pattern="/resources/**" access="permitAll" requires-channel="https"/>
    <intercept-url pattern="/admin**" access="hasRole('ROLE_ADMIN')" requires-channel="https"/>
    <intercept-url pattern="/rest/**" access="hasRole('ROLE_USER')" requires-channel="https"/>
    <intercept-url pattern="/index" access="hasRole('ROLE_USER')" requires-channel="https"/>
    <intercept-url pattern="/upload/**" access="hasRole('ROLE_USER')" requires-channel="https"/>

关于java - 为什么我的 Spring OAuth2 服务器无法使用 SSL 自签名 ssl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37666218/

相关文章:

java - 如何防止 Jsoup 在 http 错误时抛出异常?

java - 从 Assets 复制数据库时出错

java - 唯一查询没有匹配结果(错误 782)

java - 如何为多个 Spring Boot 类分配上下文路径前缀?

java - System.setProperty 无法进行第二次调用

java - 即使我已经添加了证书,如何修复 javax.net.ssl.SSLHandshakeException

java - 如何在每个 logback 日志中输出日期

java - 间接 Hibernate/JPA 方法调用丢失事务

java - Spring:为类路径资源注入(inject) URL

ssl - TeamCity 和 Mercurial https