Spring Boot Backend Development Course, Adding Approved URI to OAuth Service

Modern web applications require user authentication and authorization management. OAuth 2.0 is one of the popular protocols for such authentication, allowing users to securely access services without exposing their credentials to third-party applications. This tutorial will guide you step-by-step on how to add authorized URIs to an OAuth service using Spring Boot.

1. Overview of OAuth

OAuth 2.0 is a protocol for user authentication, widely used primarily in web applications. When using OAuth, users receive a token that allows them to access other services without providing their login information. OAuth 2.0 supports many different authentication providers, each requiring a URI to process authentication requests.

2. Integrating Spring Boot with OAuth

Using Spring Boot makes it easy to implement OAuth 2.0 authentication. This process aims to set up an OAuth 2.0 client using Spring Security and add authorized URIs to the service.

2.1. Project Setup

To start a Spring Boot project, add the dependencies for spring-boot-starter-web and spring-boot-starter-security. Additionally, you will also need the dependency for spring-boot-starter-oauth2-client to use OAuth 2.0 clients.

    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-oauth2-client</artifactId>
    </dependency>

3. Understanding the Authorized URI

In OAuth 2.0, the authorized URI is the address where users will be redirected after authentication. This URI is specified when registering the client, and the authentication service redirects to this URI to send the response after user authentication. It may include an access token along with user information.

4. Adding Authorized URI in Spring Boot

4.1. Configuring application.yml

In Spring Boot, you can set up OAuth client properties through the application.yml or application.properties file. Here is an example of configuring a Google OAuth 2.0 client.


spring:
  security:
    oauth2:
      client:
        registration:
          google:
            client-id: YOUR_CLIENT_ID
            client-secret: YOUR_CLIENT_SECRET
            scope: profile, email
            redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
        provider:
          google:
            authorization-uri: https://accounts.google.com/o/oauth2/auth
            token-uri: https://oauth2.googleapis.com/token
            user-info-uri: https://www.googleapis.com/oauth2/v3/userinfo

4.2. Configuring Web Security

To use OAuth 2.0 authentication, you need to add web security configuration. The following settings ensure that only authenticated users can access certain paths.


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/", "/login").permitAll() // Paths accessible without login
                .anyRequest().authenticated() // All other requests require authentication
                .and()
            .oauth2Login(); // OAuth 2.0 login
    }
}

4.3. Testing the Authorized URI

You can now run Spring Boot and navigate to http://localhost:8080 to test the OAuth login. A Google login button will appear, allowing users to authenticate.

5. Monitoring the Authorized URI

It is important to understand how the authorized URI works in an OAuth 2.0 application. Let’s look at several issues that may arise in this process and their solutions.

5.1. Redirection Errors

If the redirection URI is set incorrectly, users may not be redirected to the appropriate page after authentication. In such cases, you need to ensure that the authorized redirection URI is entered correctly when registering the client. For example:

    
    redirect-uri: http://localhost:8080/login/oauth2/code/google

5.2. Scope Issues

Problems can also occur if the requested scopes are set incorrectly. If the scopes are set wrong, the authentication may fail, so pay attention to scope settings.

6. Implementing Additional Features

Now that we have set the basic OAuth 2.0 elements, we can implement features that display additional information after user authentication or control conditional access rights. For instance, let’s look at how to retrieve user profile information and display it on a web page.

6.1. Fetching User Information


import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class UserController {

    @GetMapping("/user")
    public String user(@AuthenticationPrincipal OAuth2AuthenticationToken authentication, Model model) {
        model.addAttribute("user", authentication.getPrincipal().getAttributes());
        return "user"; // Navigate to user.html
    }
}

6.2. Displaying User Information

To display user information, you can create a simple HTML template. Create a file named src/main/resources/templates/user.html and add the following code.


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>User Information</title>
</head>
<body>

<h1>User Information</h1>
<ul>
    <li>Name: <span th:text="${user['name']}"></span></li>
    <li>Email: <span th:text="${user['email']}"></span></li>
</ul>

</body>
</html>

7. Conclusion

In this tutorial, we learned how to set up OAuth 2.0 authentication using Spring Boot and add authorized URIs. Implementing user authentication through the OAuth protocol provides a secure and convenient user experience. You can now add these functionalities to your projects and explore integrations with various APIs.

To fully utilize all features of OAuth 2.0, it’s advisable to refer to various libraries and documentation. For more in-depth information, please consult the official OAuth 2.0 documentation.