This is a basic authentication service built using the Spring Boot framework and the Model-View-Controller (MVC) architecture. The service allows users to register, login, and manage their account information.
I've also written a Medium post about this project, which you can read at https://medium.com/@sadcat/build-your-own-authentication-service-with-spring-boot-cacd22d72851. The post goes into more detail about the development process and how to use the app.
To build and run this application, you'll need the following tools:
- Docker
- Maven 3^
- Java 19^
Clone this repository to your local machine.
Open a terminal and navigate to the root directory of the project, then run the following command:
bash generate_passwords.sh
- This will generate unique passwords for the MongoDB and Redis databases used by the application, as well as for the JSON Web Tokens (JWT) used for authentication.
⚠️ Replace the KAVENEGAR_YOUR_API_KEY placeholder in the src/main/resources/application-dev.yml file with your Kavenegar API key.
Build and run the Docker dependencies by running the following command in your terminal:
docker-compose -f docker-compose-dependency.yml up -d --build
This will start MongoDB and Redis containers in the background.
Build and run the application by running the following command in your terminal:
mvn spring-boot:run
This will start the application on http://localhost:8080.
Build command:
mvn clean package
This application was built and tested with Apache Maven 3.9.0. If you encounter any issues with other versions of Maven, please try using version 3
The authentication service provides the following endpoints:
To register a new user, send a POST
request to the /api/v1/users/signup
endpoint with a JSON payload containing the following fields:
{
"fullName": "Your Name",
"username": "your_username",
"password": "your_password",
"phoneNumber": "your_phone_number"
}
If the registration is successful, the server will respond with a 201 Created
status code.
To log in a user, send a POST
request to the /api/v1/users/signin
endpoint with a JSON payload containing the following fields:
{
"username": "your_username",
"password": "your_password"
}
If the login is successful, the server will respond with a 200 OK
status code and a JSON payload containing a JWT token and Refresh token.
To retrieve a user's profile information, send a GET
request to the /api/v1/users/me/profile
endpoint.
If the token is valid and the user exists, the server will respond with a 200 OK
status code and a JSON payload containing the user's full name, birthday, bio.