2017-04-11 49 views
0

移动移动到基于Java config认证无法通过身份验证的步骤 可能有人解释后,如何实现的AuthenticationManager?春天AUTH - 从XML到Java配置

现在我得到

{ 
    "error": "unauthorized", 
    "error_description": "Full authentication is required to access this resource" 
} 

当我通过http://localhost:8080/oauth/token?grant_type=password&[email protected]&password=cant_hack_this&client_id=sso-auth-client&client_secret=mySecret

这里试图获取令牌回购https://github.com/mikesockor/SOFqstn

@SpringBootApplication 
@EnableResourceServer 
@EnableDiscoveryClient 
//@ImportResource({"classpath*:spring-security-oauth2.xml"}) 

如何实现这一点?

<sec:http pattern="/oauth/token" create-session="stateless" authentication-manager-ref="authenticationManager" > 
    <sec:intercept-url pattern="/oauth/token" /> 
    <sec:anonymous enabled="true" /> 
    <sec:http-basic entry-point-ref="clientAuthenticationEntryPoint" /> 
    <sec:custom-filter ref="clientCredentialsTokenEndpointFilter" after="BASIC_AUTH_FILTER" /> 
    <sec:access-denied-handler ref="oauthAccessDeniedHandler" /> 
</sec:http> 

<sec:http auto-config="true" pattern="/oauth/check_token" create-session="stateless" authentication-manager-ref="authenticationManager"> 
    <sec:intercept-url pattern="/oauth/check_token" access="IS_AUTHENTICATED_FULLY" /> 
    <sec:anonymous enabled="false"/> 
    <sec:http-basic entry-point-ref="clientAuthenticationEntryPoint" /> 
</sec:http> 

<sec:http pattern="/**" create-session="stateless" entry-point-ref="oauthAuthenticationEntryPoint" 
      access-decision-manager-ref="accessDecisionManager" > 
    <sec:anonymous enabled="false" /> 
    <sec:intercept-url pattern="/**" /> 
    <sec:custom-filter ref="resourceServerFilter" before="PRE_AUTH_FILTER" /> 
    <sec:access-denied-handler ref="oauthAccessDeniedHandler" /> 
</sec:http> 

另外,如果我会尽量

#security.basic.enabled=false 
security.ignored=/** 

越来越

{ 
    "timestamp": 1491919124442, 
    "status": 405, 
    "error": "Method Not Allowed", 
    "exception": "org.springframework.web.HttpRequestMethodNotSupportedException", 
    "message": "Request method 'POST' not supported", 
    "path": "/oauth/token" 
} 

回答

0

春天验证的全配置与启动,你需要以下

首先,你必须实现了配置的基本类中的春天验证

@Configuration 
@EnableWebSecurity 
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private CustomUserDetailsService userDetailsService; 

    @Autowired 
    private AccountAuthenticatoinProvider accountAuthenticationProvider; 

    @Override 
    protected void configure(AuthenticationManagerBuilder auth) throws Exception { 
     auth.userDetailsService(userDetailsService); 
     auth.authenticationProvider(accountAuthenticationProvider); 
    } 

    @Override 
    @Bean 
    public AuthenticationManager authenticationManagerBean() throws Exception { 
     return super.authenticationManagerBean(); 
    } 

} 

接下来,您将需要ResourceServerConfiguration和AuthorizationServerConfiguration

@Configuration 
public class OAuth2ServerConfiguration { 

    private static final String RESOURCE_ID = "restservice"; 

    @Configuration 
    @EnableResourceServer 
    protected static class ResourceServerConfiguration extends ResourceServerConfigurerAdapter { 

     ..... 
     @Override 
     public void configure(ResourceServerSecurityConfigurer resources) { 
      // @formatter:off 
      resources 
        .resourceId(RESOURCE_ID).tokenStore(new JwtTokenStore(jwtAccessTokenConverter)); 
      // @formatter:on 
     } 

     @Override 
     public void configure(HttpSecurity http) throws Exception { 
      // @formatter:off 
      http 
        .csrf().disable() 
        .authorizeRequests() 
        .antMatchers("/api/**").authenticated(); 



      // @formatter:on 
     } 

.... 

    } 



    @Configuration 
    @EnableAuthorizationServer 
    protected static class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter { 

     ..... 
     @Override 
     public void configure(ClientDetailsServiceConfigurer clients) throws Exception { 
      // @formatter:off 
      clients 
        .inMemory() 
        .withClient("clientapp") 
        .authorizedGrantTypes("password","refresh_token") 
        .authorities("USER") 
        .scopes("read", "write") 
        .resourceIds(RESOURCE_ID) 
        .secret("123456"); 
      // @formatter:on 
     } 

    } 
..... 

} 

请查看以下混帐回购协议https://github.com/cpapidas/Spring-Boot-OAuth2-JWT-MySQL