{"id":23519755,"url":"https://github.com/ramonbecker/ms-cloud","last_synced_at":"2025-08-30T17:46:14.926Z","repository":{"id":246042471,"uuid":"789353730","full_name":"RamonBecker/ms-cloud","owner":"RamonBecker","description":"Microservices project developed with .NET, using MySQL as the chosen database. I created two flowcharts to provide a better understanding of the work accomplished. The first flowchart illustrates how the project was divided and the interactions of each microservice","archived":false,"fork":false,"pushed_at":"2024-11-15T14:18:22.000Z","size":9090,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-09T06:25:43.366Z","etag":null,"topics":["authentication","authorization","gateway","net","oauth2","openid","rabbitmq","rabbitmq-consumer","rabbitmq-producer","rest-api","webservices"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RamonBecker.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-04-20T09:58:37.000Z","updated_at":"2025-01-09T17:26:45.000Z","dependencies_parsed_at":null,"dependency_job_id":"ac2cc912-d26a-410d-a23b-3f7be96b94af","html_url":"https://github.com/RamonBecker/ms-cloud","commit_stats":null,"previous_names":["ramonbecker/ms-cloud"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/RamonBecker/ms-cloud","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RamonBecker%2Fms-cloud","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RamonBecker%2Fms-cloud/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RamonBecker%2Fms-cloud/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RamonBecker%2Fms-cloud/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RamonBecker","download_url":"https://codeload.github.com/RamonBecker/ms-cloud/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RamonBecker%2Fms-cloud/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272884345,"owners_count":25009599,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-30T02:00:09.474Z","response_time":77,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["authentication","authorization","gateway","net","oauth2","openid","rabbitmq","rabbitmq-consumer","rabbitmq-producer","rest-api","webservices"],"created_at":"2024-12-25T16:10:23.491Z","updated_at":"2025-08-30T17:46:14.915Z","avatar_url":"https://github.com/RamonBecker.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ms-cloud\n\n\n## :information_source: Information \n\nMicroservices project developed with .NET, using MySQL as the chosen database. I created two flowcharts to provide a better understanding of the work accomplished. The first flowchart illustrates how the project was divided and the interactions of each microservice. The second, in a simplified manner, demonstrates how the Identity Server handles user authentication within the system.\n\nTechnologies used during development:\n\n- OAuth2 for using temporary access tokens instead of user credentials. These tokens can have specific scopes (defining what can be accessed) and limited lifespans, ensuring enhanced security.\n\n- OpenID Connect to provide an ID Token in JWT (JSON Web Token) format, containing authenticated user information such as name, email, and unique identifier, allowing the application to verify the user's identity.\n\n- Duende Identity Server for centralized authentication (Single Sign-On), enabling users to log in once to access multiple applications, reducing the need for separate logins for each application and offering a Single Sign-On (SSO) experience.\n\n- Duende Identity Server implements OAuth2 and OpenID Connect, enabling authentication and authorization with access tokens and identity tokens, which are fundamental for securing resources and validating user identities.\n\n- Ocelot (API Gateway) to route incoming requests to the microservices, simplifying the complexity of communication between the client and internal services. It also supports authentication and authorization using JWT and integrations with identity providers like IdentityServer, facilitating API security.\n\n- RabbitMQ to create queues and store and organize messages sent by producers so they can be consumed by consumers later, promoting an asynchronous workflow.\n\n## Data flowchart\n\n![GeekShopping Web (2)](https://github.com/user-attachments/assets/8a8e56a4-314e-4603-8f32-72f4ac01e7a8)\n\n\n## IdentityServer Flowchart\n\n![IdentityServer](https://github.com/user-attachments/assets/454de203-58dd-4e02-a887-12a12df885d9)\n\n\n## ⚠️ Prerequisite\n![ASPNET Badge](https://img.shields.io/badge/.NET-512BD4?style=for-the-badge\u0026logo=dotnet\u0026logoColor=white)\n\n![Mysql Badge](https://img.shields.io/badge/MySQL-00000F?style=for-the-badge\u0026logo=mysql\u0026logoColor=white)\n\n![openid (1)](https://github.com/user-attachments/assets/c90bb5e2-cc28-4cae-bbac-8688c19bf4ec)\n\n![oauth2 (1)](https://github.com/user-attachments/assets/ccf03096-31af-45ce-b672-c8c108e8ab14)\n\n![duend (1)](https://github.com/user-attachments/assets/96c3b293-42ff-4904-9cf8-ea6a5c86fc1b)\n\n![ocelot (1)](https://github.com/user-attachments/assets/79f843ad-949f-4694-8a2f-85eb0533683e)\n\n![RabbitMQ](https://img.shields.io/badge/Rabbitmq-FF6600?style=for-the-badge\u0026logo=rabbitmq\u0026logoColor=white)\n\n\n## :rocket: Installation\n\n![](https://img.shields.io/badge/Linux-FCC624?style=for-the-badge\u0026logo=linux\u0026logoColor=black)\n\n\n```\ngit clone https://github.com/RamonBecker/ms-cloud.git\n```\n\n![](https://img.shields.io/badge/Windows-0078D6?style=for-the-badge\u0026logo=windows\u0026logoColor=white)\n```\ngit clone https://github.com/RamonBecker/ms-cloud.git\nor install github https://desktop.github.com/ \n```\n\n\nTo install the project you must install mysql on your machine.\n\n## ⚙️ Installing MySQL\n\nEnter the following commands in the terminal.\n\n```\nsudo apt update\nsudo apt install mysql-server\n\n```\n### Configuring MySQL\n\nFor new installations, you will want to run the security script that is included. This changes some of the less secure default options for things like root logins and example users. Enter the command below.\n\n```\nsudo mysql_secure_installation\n```\nThis will take you through a series of prompts where you can make some changes to the security options of your MySQL installation. The first prompt will ask you if you want to configure the Validate Password Plugin, which can be used to test the strength of your MySQL password. Regardless of your choice, the next prompt will be to set the password for the MySQL root user. Sign in and then confirm a secure password of your choice.\n\nFrom there, you can press Y and then ENTER to accept the default answers for all subsequent questions. This will remove some anonymous users and the test database, disable remote login for root, and load all of these new rules so that MySQL immediately respects the changes you made.\n\n### Testing MySQL\n\nTo see if MYSQL is running, type the following command.\n\n```\nsystemctl status mysql.service\n```\n\nIf MySQL is not running, you can start it with the following command.\n```\nsudo systemctl start mysql\n\nNow try to connect your root user to MySQL.\n```\nmysql -u root -p\n\n### Attention when creating the database\n\nAt the visual studio terminal enter the following command to create the database. But first check your username in the MYSQL database in the file: appsettings.json\n\nType the following:\n```\nUpdate-Database\n```\nIf there is any conflict with the migrations, delete them and create them again using the command\n```\nAdd-Migration Your message\n\nUpdate-Database\n```\n\n\n\n## 🔨 Docker\n\nTo install RabbitMQ in Docker container, open the windows cmd or linux terminal and type:\n```\ndocker run -d -p 15672:15672 -p 5672:5672 --name rabbitmq rabbitmq-3-management\n```\n\nOnce RabbitMQ is installed, you will need to enable the feature to move messages from one queue to another. For this you will need to enter the RabbitMQ bash, type in the terminal:\n```\ndocker exec -it rabbitmq bash\n```\nRun the following command in bash:\n```\nrabbitmq-plugins enable rabbitmq_shovel rabbitmq_shovel_management\n```\n\n\nRabbitMQ has as default user:\n```\nusername: guest\npassword: guest\n```\nIf you want to change the default user, open your browser and enter the following address to enter the RabbitMQ user settings and make the changes you want:\n```\nhttp://localhost:15672/#/users/guest\n```\n\n\n\n\n## :memo: Developed features\n\n- [x] CRUD Shopping Cart\n- [x] CRUD Product\n- [x] CRUD Shopping Cart Discount Coupon\n- [x] Purchase Order Payment Record\n- [x] Creating, consuming and sending queues in RabbitMQ\n\n\n\n\n## :technologist:\t Author\n\nBy Ramon Becker 👋🏽 Get in touch!\n\n\n\n[\u003cimg src='https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/github.svg' alt='github' height='40'\u003e](https://github.com/RamonBecker)  [\u003cimg src='https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/linkedin.svg' alt='linkedin' height='40'\u003e](https://www.linkedin.com/in/https://www.linkedin.com/in/ramon-becker-da-silva-96b81b141//)\n![Gmail Badge](https://img.shields.io/badge/-ramonbecker68@gmail.com-c14438?style=flat-square\u0026logo=Gmail\u0026logoColor=white\u0026link=mailto:ramonbecker68@gmail.com)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Framonbecker%2Fms-cloud","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Framonbecker%2Fms-cloud","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Framonbecker%2Fms-cloud/lists"}