diff --git a/.gitignore b/.gitignore index 22ab278..c07fcd4 100755 --- a/.gitignore +++ b/.gitignore @@ -1,55 +1,59 @@ -#General +# General *obj *bin *wwwroot -*.code-workspace -*.tmp -*.tmp_proj -*_wpftmp.csproj -*.log -.builds -.cache -*.pidb -*.svclog -*.scc -*.pfx *.pem -#Environment +# Nestjs specific +.next +/dist +/build + +# Logs +logs +*.log +npm-debug.log* +pnpm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# temp directory +.temp +.tmp + +# Environment files .env .venv env/ venv/ *.ini -#Docker +# Docker #*Dockerfile -#Kubernetes +# Kubernetes *kubernetes -#.NET Core +# .NET Core project.lock.json project.fragment.lock.json artifacts/ -#Python +# Python __pycache__/ *.manifest *.spec *py.cover -#Js -package-lock.json - -#VSCode +# VSCode *.vs *.vscode -#Expo +# Expo .expo -#npm +# npm *node_modules dist/ diff --git a/README.md b/README.md index f3c6f4a..e2b6a5d 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ It is a microservice for user administration and authenication, using JWT tokens - Google account and activate [Google cloud](https://console.cloud.google.com) to obtain OAuth2 config values (Optional) > [!IMPORTANT] -> It is necessary to complete the configuration file(.env), and create the PEM files and place them in the root folder +> It is necessary to complete the configuration file(.env), create the PEM files and place them in the root folder ## Installing 1. Create a virtual environment @@ -20,7 +20,7 @@ python -m venv .venv ```bash source .venv/bin/activate ``` - Activate it (Windows PowerShell) + (Windows PowerShell) ```bash .venv\Scripts\Activate.ps1 ``` @@ -53,7 +53,6 @@ http://127.0.0.1:8000/docs ``` ## Using with Docker - 1. Create the image ```bash docker build -t auth-service:latest . @@ -67,5 +66,26 @@ docker pull ghcr.io/ablogo/authfastapi:latest docker run -p 8000:80 --env-file .env auth-service:latest ``` +## Google OAuth2 +To implement this auth system, you need to obtain OAuth 2.0 credentials from the Google API Console. + +[Follow the steps on this page to obtain the credentials](https://developers.google.com/identity/protocols/oauth2) + +Once you have done this, you must place those values in the .env file. + +```bash +GOOGLE_OAUTH_ID= +GOOGLE_OAUTH_CLIENT= +GOOGLE_OAUTH_SECRET= +``` + +The following values should be customized based on your development, the scopes that you need and the links on your site. + +```bash +GOOGLE_OAUTH_REDIRECT_RESPONSE=https://127.0.0.1:8000/auth/google-response +GOOGLE_OAUTH_JS_ORIGINS=http://127.0.0.1:8000,http://localhost:8081 +GOOGLE_OAUTH_SCOPES=https://www.googleapis.com/auth/userinfo.email,https://www.googleapis.com/auth/userinfo.profile,openid +``` + > [!NOTE] > Since the project is used for learning, it does not strictly follow the concept of microservices, where each microservice should have its own realm of responsability and use different approaches. diff --git a/private_key.pem b/private_key.pem new file mode 100644 index 0000000..cd422c8 --- /dev/null +++ b/private_key.pem @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +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 +f/dzmV03GDhf4roXy3qQV5Zu/0CRZUE= +-----END PRIVATE KEY----- diff --git a/public_key.pem b/public_key.pem new file mode 100644 index 0000000..3c31913 --- /dev/null +++ b/public_key.pem @@ -0,0 +1,14 @@ +-----BEGIN PUBLIC KEY----- +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAohMWrg/JZ5tyJM7Jnn0A +/4SkhIQmxyn0mmGb2PUypHyLEtuZr3BYyGNGy49TFxV646n+HY/Bz9jL4ma6JJRR +9aPdX89cLoKtkLDC5R6kXKFyd5B+Qak9a+eOKD5D+X5ZOAz194R6nWQ24a/cYWNX +Wmf7UuOOwCu9C30lw+mEa1KOpvfRHsgw7WcnZLXZzBGa6B0o2pXNqA3S1jSQCb9c +Gee6K7Br/z5lYvfOoTZa2AgWrZ4cAdYd5Z2yuPZ6MVhTv/ZIIJ3+qER0/qEAY1fT +XrpQ1+TF1AISvOLUo5YXJV/ZSoj/45IKZ5TrbNsSL1GqYoAEbAvbOFBYF6jlYJZ2 +noeU4QZsPawKuTZM3JH4P9h7mbXRhTuSaYAQk4hZJ1JZxNNCsbeSFnju7BxsnL9w +dPwHUkMIpwbGiNnDzrMMo5T/K/qZ/G8jKFBaNUMOPbwX6FhanTgMVpRoqLByvKiP ++I+t2zSxrS8D8eC5Ek++bu0iq/LcGD4WadUTxyWrkURpUw6PgZa76KbAI63HvAAj +2zLeR88ZYYwbQaqgUtREoGfCwmoHXOSKT7cBxNiFow5W89pMj0PXtGAmfkik1XGS +3B+izybnpQ32ff9z34BbvCYn5g6uRM4U+WhsqyeT2YyOv/nOrUQXiqQdLGwxzmRr +Lq8jq0tHJZJWErtZv/49do0CAwEAAQ== +-----END PUBLIC KEY----- diff --git a/src/main.py b/src/main.py index 808cb36..f876648 100644 --- a/src/main.py +++ b/src/main.py @@ -48,4 +48,9 @@ async def shutdown(): #Root route @app.get("/") async def main(): + return "Learning python" + +#Root route +@app.get("/auth/health") +async def health(): return datetime.now()