2015-07-18 15 views
7

के साथ स्प्रिंग बूट सिक्योरिटी ओएथ 2 मेरा रीस्टफुल माइक्रोस्कोर्सेस सुरक्षित करने के लिए मैं Part V of Getting Started with Spring Boot Security का अनुसरण कर रहा हूं।फॉर्म लॉग इन

सरल प्रवाह है कि मैं लागू करने का इरादा है: -

  1. अप्रमाणित हैं, तो उपयोगकर्ता/लॉगिन ' पर एक कस्टम प्रवेश पृष्ठ पर रीडायरेक्ट किया जाता है कहते हैं।

  2. उपयोगकर्ता अपने प्रमाण पत्र प्रदान करता है।

  3. सफल प्रमाणीकरण पर उपयोगकर्ता को होम पेज ('/ home') पर रीडायरेक्ट किया जाता है। अनुरोध में पहुंच टोकन प्रदान करने के बाद मुझे अपने आरईएसटी एंडपॉइंट ( जुउल प्रॉक्सी सर्वर के पीछे) तक पहुंचने में सक्षम होना चाहिए।

उपर्युक्त लिंक में प्रारंभ करना मार्गदर्शिका मूलभूत एथ और डमी उपयोगकर्ता का उपयोग .properties या .yml फ़ाइल में कॉन्फ़िगर किया गया है।

यह कैसे मैं अपने विन्यास के साथ करने की कोशिश की है: -

@Configuration 
@EnableAuthorizationServer 
public class OAuth2Config 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("acme").secret("acmesecret") 
       .authorizedGrantTypes("authorization_code", "refresh_token", "password").scopes("openid") 
       .accessTokenValiditySeconds(3600); 
    } 

    @Override 
    public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception { 
     oauthServer.tokenKeyAccess("isAnonymous()").checkTokenAccess("isAnonymous()") 
       .allowFormAuthenticationForClients(); 
    } 

} 



@Configuration 
@Import({ OptoSoftSecurityServiceConfig.class }) 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private UserDetailsService userDetailsService; // backed by MongoDB 

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

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.httpBasic().disable().formLogin();// disabled basic auth and configured to use dafault Spring Security form login. 
    } 
} 

साधते authorization endpoint मुझे 'http://localhost:9999/uaa/login' पर रीडायरेक्ट त्रुटि संदेश के साथ के रूप में: -

<oauth> 
<error_description> 
Full authentication is required to access this resource 
</error_description> 
<error>unauthorized</error> 
</oauth> 

समस्या

  1. कैसे सीए n मैं स्थिर उपयोगकर्ता के बजाय UserDetailsService का उपयोग करने के लिए प्राधिकरण सर्वर को कॉन्फ़िगर करता हूं और मूल ऑथ के बजाय फॉर्म लॉगिन का उपयोग करता हूं।

  2. अनुदान प्रकार के रूप में 'authorization_code' का उपयोग करते समय मैं ऑटो स्वीकृति कैसे कॉन्फ़िगर कर सकता हूं?

  3. क्या यह बेसिक ऑथ द्वारा संरक्षित एंडपॉइंट के लिए अनिवार्य है? /ओथ/अधिकृत 'एंडपॉइंट तक पहुंचने के लिए' पूर्ण प्रमाणीकरण की आवश्यकता क्यों है '। मुझे विश्वास है कि हम नहीं जानते कि इस एंडपॉइंट से पहले उपयोगकर्ता कौन है। उपयोगकर्ता को केवल को वैध प्रमाण-पत्रों का उपयोग करके प्रमाणित किया जा सकता है, जो लॉगिन के बाद आता है।

उत्तर

4

अंत में यह काम कर रहा है। उल्लिखित ब्लॉग में गिट रेपो पहले से ही इस बात को कॉन्फ़िगर किया गया था। बाहर निकलता है यह बहुत सीधे आगे था।

** 
* @author kumar 
* 
*/ 
@SpringBootApplication 
public class AuthenticationServerApplication { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     SpringApplication.run(AuthenticationServerApplication.class, args); 

    } 

    @Configuration 
    protected static class LoginConfig extends WebSecurityConfigurerAdapter { 

     @Autowired 
     private AuthenticationManager authenticationManager; 

     @Override 
     protected void configure(HttpSecurity http) throws Exception { 
      http.formLogin().permitAll().and().authorizeRequests().anyRequest().authenticated();//.and().userDetailsService(yourCustomerUserDetailsService); 
     } 

     @Override 
     protected void configure(AuthenticationManagerBuilder auth) throws Exception { 
      auth.parentAuthenticationManager(authenticationManager); 
     } 
    } 

    @Configuration 
    @EnableAuthorizationServer 
    protected static class OAuth2Config 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("acme").secret("acmesecret") 
        .authorizedGrantTypes("authorization_code", "refresh_token", "password").scopes("openid") 
        .autoApprove(true); 
     } 

     @Override 
     public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception { 
      oauthServer.tokenKeyAccess("permitAll()").checkTokenAccess("isAuthenticated()"); 
     } 

    } 

} 

application.yml: - -:

security: 
     user: 
     password: password 
    server: 
     port: 9999 
     context-path: /uaa 
+0

तुम मेरे लिए Git रेपो url प्रदान कृपया सकते हैं

यह वही है (मैं भी सच करने के लिए स्वत: अनुमोदन कॉन्फ़िगर किया है) मेरे लिए काम किया है यह उदाहरण? – DIVA

+0

हाय कुमार, जिथब रेपो नहीं मिला है। क्या मेरे पास सोर्स कोड हो सकता है? – tranceholic

+2

@tranceholic आप या तो चेकआउट कर सकते हैं: https://github.com/ksambhav/trueyes या डेई साइर की स्प्रिंग गाइड: https: // github।com/वसंत-गाइड/टुट-वसंत-सुरक्षा और कोणीय जे एस/पेड़/मास्टर/OAuth2 –

संबंधित मुद्दे