title: Spring required a bean of type 'AuthenticationManager'
body: <p>I have been trying to follow a tutorial found <a href="https://shekhargulati.com/2018/02/15/single-sign-on-in-spring-boot-applications-with-spring-security-oauth/" rel="noreferrer">HERE</a> for setting up a demo to help me understand SSO on my local machine before implementing in another project. I have run into a problem that has left me stuck. I receive and error telling me to add a bean. Please let me know what code I am missing.  I cannot get the program to run. </p>
  
  <p><strong>Tree of file system</strong></p>
  
  <p><a href="https://i.stack.imgur.com/1FOFi.png" rel="noreferrer"><img src="https://i.stack.imgur.com/1FOFi.png" alt="enter image description here"></a></p>
  
  <p><strong>AuthApplication.java</strong></p>
  
  <pre><code>package com.spud.auth;
  
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.boot.SpringApplication;
  import org.springframework.boot.autoconfigure.SpringBootApplication;
  import org.springframework.context.annotation.Configuration;
  import org.springframework.security.authentication.AuthenticationManager;
  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.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
  import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
  import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;
  import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
  import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer;
  import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer;
  
  @SpringBootApplication
  @EnableResourceServer
  public class AuthApplication {
  
      public static void main(String[] args) {
          SpringApplication.run(AuthApplication.class, args);
      }
  
      @Configuration
      protected static class LoginConfig extends WebSecurityConfigurerAdapter {
  
          @Override
          protected void configure(HttpSecurity http) throws Exception {
              http.requestMatchers().antMatchers("/login", "/oauth/authorize").and().authorizeRequests().anyRequest()
                      .authenticated().and().formLogin().permitAll();
          }
  
          @Override
          protected void configure(AuthenticationManagerBuilder auth) throws Exception {
              auth.inMemoryAuthentication().withUser("user").password("password").roles("USER");
          }
      }
  
      @Configuration
      @EnableAuthorizationServer
      protected static class OAuth2Config extends AuthorizationServerConfigurerAdapter {
          @Autowired
          private AuthenticationManager authenticationManager;
  
          @Override
          public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
              clients.inMemory().withClient("foo").secret("bar")
                      .authorizedGrantTypes("authorization_code", "refresh_token", "password").scopes("user_info")
                      .autoApprove(true);
          }
  
          @Override
          public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
              oauthServer.tokenKeyAccess("permitAll()").checkTokenAccess("isAuthenticated()");
          }
  
          @Override
          public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
              endpoints.authenticationManager(authenticationManager);
          }
      }
  }
  </code></pre>
  
  <p><strong>UserController.java</strong></p>
  
  <pre><code>package com.spud.controllers;
  
  import java.security.Principal;
  
  import org.springframework.web.bind.annotation.GetMapping;
  import org.springframework.web.bind.annotation.RestController;
  
  @RestController
  public class UserController {
  
      @GetMapping("/user/me")
      public Principal user(Principal principal) {
          return principal;
      }
  }
  </code></pre>
  
  <p><strong>application.properties</strong></p>
  
  <pre><code>server.context-path=/sso-server
  </code></pre>
  
  <p><strong>Error Given</strong> (not full console output from run but this is the error)</p>
  
  <pre><code>***************************
  APPLICATION FAILED TO START
  ***************************
  
  Description:
  
  Field authenticationManager in com.spud.auth.AuthApplication$OAuth2Config required a bean of type 'org.springframework.security.authentication.AuthenticationManager' that could not be found.
  
  
  Action:
  
  Consider defining a bean of type 'org.springframework.security.authentication.AuthenticationManager' in your configuration.
  </code></pre>