使用表单登录的Spring Boot安全OAuth2

我正在遵循Spring Boot Security入门的第五部分来保护我的RESTful微服务。

我打算实施的简单流程是: -

  • 如果未经身份验证,用户将被重定向到一个自定义登录页面,如'/ login'。

  • 用户提供他的凭据。

  • 成功验证用户被重定向到主页('/ home')。 在请求中提供访问令牌后,我应该能够访问我的REST端点(在Zuul代理服务器后面)。

  • 上述链接中的“入门指南”使用在.properties或.yml文件中配置的Basic Auth和dummy用户。

    这是我用我的配置尝试的方法: -

    @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.
        }
    }
    

    点击授权端点将我重定向到'http:// localhost:9999 / uaa / login',并显示错误消息: -

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

    问题

  • 如何配置授权服务器使用UserDetailsS​​ervice而不是静态用户,并使用表单登录而不是基本身份验证。

  • 如何在使用'authorization_code'作为授权类型时配置自动批准?

  • / oauth /授权端点必须受基本身份验证的保护吗? 为什么需要“完全身份验证”才能访问/ oauth / authorize端点。 我相信在这个端点之前我们不知道用户是谁。 用户只有在使用表单登录后提供的有效凭证进行身份验证后才能被识别。


  • 最后让它工作。 提到的博客中的git repo已经配置了这个东西。 事实证明,这非常简单。

    这对我来说很有用(我还将自动批准配置为true): -

    **
     * @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
    
    链接地址: http://www.djcxy.com/p/86775.html

    上一篇: Spring Boot Security OAuth2 with Form Login

    下一篇: How set up my directory to work with eyeglass on fetching modularscale