diff --git a/src/main/java/com/facadecode/spring/security/config/ApiSecurityConfig.java b/src/main/java/com/facadecode/spring/security/config/ApiSecurityConfig.java
index 3f8d688..ff19a4e 100644
--- a/src/main/java/com/facadecode/spring/security/config/ApiSecurityConfig.java
+++ b/src/main/java/com/facadecode/spring/security/config/ApiSecurityConfig.java
@@ -6,8 +6,10 @@ import org.springframework.security.config.annotation.web.builders.HttpSecurity;
 import org.springframework.security.config.http.SessionCreationPolicy;
 import org.springframework.security.web.SecurityFilterChain;
 
+import static com.facadecode.spring.security.constant.SecurityConstants.API_AUTH_TOKEN;
 import static com.facadecode.spring.security.constant.SecurityConstants.PUBLIC_API_LIST;
 import static org.springframework.http.HttpMethod.GET;
+import static org.springframework.http.HttpMethod.POST;
 
 @Configuration
 public class ApiSecurityConfig {
@@ -20,10 +22,10 @@ public class ApiSecurityConfig {
                                 httpSecuritySessionManagementConfigurer.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                 )
                 .authorizeRequests(auth -> auth
+                        .antMatchers(POST, API_AUTH_TOKEN).permitAll()
                         .antMatchers(GET, PUBLIC_API_LIST).permitAll()
                         .anyRequest().authenticated()
-                )
-                .httpBasic();
+                );
         return http.build();
     }
 }
diff --git a/src/main/java/com/facadecode/spring/security/config/SecurityConfig.java b/src/main/java/com/facadecode/spring/security/config/SecurityConfig.java
index ecc57e3..8db2a78 100644
--- a/src/main/java/com/facadecode/spring/security/config/SecurityConfig.java
+++ b/src/main/java/com/facadecode/spring/security/config/SecurityConfig.java
@@ -2,9 +2,12 @@ package com.facadecode.spring.security.config;
 
 import com.facadecode.spring.security.security.PermissionEvaluatorStrategyContext;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler;
 import org.springframework.security.access.expression.method.MethodSecurityExpressionHandler;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
 import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
 import org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration;
 
@@ -21,4 +24,9 @@ public class SecurityConfig extends GlobalMethodSecurityConfiguration {
         defaultMethodSecurityExpressionHandler.setPermissionEvaluator(permissionEvaluatorStrategyContext);
         return defaultMethodSecurityExpressionHandler;
     }
+
+    @Bean
+    public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {
+        return authenticationConfiguration.getAuthenticationManager();
+    }
 }
diff --git a/src/main/java/com/facadecode/spring/security/constant/SecurityConstants.java b/src/main/java/com/facadecode/spring/security/constant/SecurityConstants.java
index 6dc90f6..0623cd4 100644
--- a/src/main/java/com/facadecode/spring/security/constant/SecurityConstants.java
+++ b/src/main/java/com/facadecode/spring/security/constant/SecurityConstants.java
@@ -1,6 +1,7 @@
 package com.facadecode.spring.security.constant;
 
 public class SecurityConstants {
+    public static final String API_AUTH_TOKEN = "/auth/token";
     public static final String API_LIST_COURSES = "/api/v1/courses";
     public static final String API_GET_COURSE = "/api/v1/courses/*";
 
diff --git a/src/main/java/com/facadecode/spring/security/controller/AuthenticationController.java b/src/main/java/com/facadecode/spring/security/controller/AuthenticationController.java
new file mode 100644
index 0000000..da34b9e
--- /dev/null
+++ b/src/main/java/com/facadecode/spring/security/controller/AuthenticationController.java
@@ -0,0 +1,29 @@
+package com.facadecode.spring.security.controller;
+
+import com.facadecode.spring.security.service.AuthenticationService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Collections;
+import java.util.Map;
+
+import static org.springframework.http.MediaType.APPLICATION_FORM_URLENCODED_VALUE;
+
+@RestController
+@RequestMapping("auth")
+public class AuthenticationController {
+    @Autowired
+    private AuthenticationService authenticationService;
+
+    @PostMapping(path = "token", consumes = {APPLICATION_FORM_URLENCODED_VALUE})
+    public ResponseEntity<Map<String,String>> generateToken(@RequestParam("username") String username,
+                             @RequestParam("password") String password) {
+        String token = authenticationService.generateToken(username, password);
+        Map<String, String> tokenResponse = Collections.singletonMap("token", token);
+        return ResponseEntity.ok(tokenResponse);
+    }
+}
diff --git a/src/main/java/com/facadecode/spring/security/service/AuthenticationService.java b/src/main/java/com/facadecode/spring/security/service/AuthenticationService.java
new file mode 100644
index 0000000..231b351
--- /dev/null
+++ b/src/main/java/com/facadecode/spring/security/service/AuthenticationService.java
@@ -0,0 +1,27 @@
+package com.facadecode.spring.security.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.stereotype.Service;
+
+import java.util.UUID;
+
+@Service
+public class AuthenticationService {
+    @Autowired
+    private AuthenticationManager authenticationManager;
+
+    public String generateToken(String username, String password) {
+        Authentication authentication = UsernamePasswordAuthenticationToken.unauthenticated(username, password);
+        authentication = authenticationManager.authenticate(authentication);
+
+        String token = null;
+        if (authentication.isAuthenticated()) {
+            token = UUID.randomUUID().toString();
+        }
+
+        return token;
+    }
+}
