diff --git a/services/iam-service-net/docs/en/ARCHITECTURE.md b/services/iam-service-net/docs/en/ARCHITECTURE.md index e0958089..f6be85ec 100644 --- a/services/iam-service-net/docs/en/ARCHITECTURE.md +++ b/services/iam-service-net/docs/en/ARCHITECTURE.md @@ -1,6 +1,6 @@ # IAM Service Architecture -> Architecture documentation for IAM (Identity and Access Management) Service built with .NET 10, OpenIddict, and Clean Architecture. +> Architecture documentation for IAM (Identity and Access Management) Service built with .NET 10, **Duende IdentityServer**, and Clean Architecture. ## Architecture Overview @@ -34,7 +34,7 @@ graph TB subgraph "Infrastructure" CTX[Identity DbContext] REPO[Repositories] - OIDDICT[OpenIddict] + IDSERVER[Duende IdentityServer] end subgraph "External" @@ -49,21 +49,21 @@ graph TB AUTH --> QRY USR --> CMD USR --> QRY - TOK --> OIDDICT + TOK --> IDSERVER CMD --> VAL CMD --> BHV CMD --> USER QRY --> REPO USER --> EVT REPO --> CTX - OIDDICT --> CTX + IDSERVER --> CTX CTX --> DB CTX --> REDIS style AUTH fill:#4a90d9,stroke:#2d5986,color:#fff style USER fill:#50c878,stroke:#2d8659,color:#fff style DB fill:#ff6b6b,stroke:#c0392b,color:#fff - style OIDDICT fill:#9b59b6,stroke:#7d3c98,color:#fff + style IDSERVER fill:#9b59b6,stroke:#7d3c98,color:#fff ``` ## OAuth2 Authentication Flow @@ -72,28 +72,28 @@ graph TB sequenceDiagram participant Client participant AuthController - participant OpenIddict + participant IdentityServer participant UserManager participant Database Note over Client,Database: Password Grant Flow (User Login) Client->>AuthController: POST /connect/token
grant_type=password - AuthController->>OpenIddict: Validate Request - OpenIddict->>UserManager: FindByEmailAsync() + AuthController->>IdentityServer: Validate Request + IdentityServer->>UserManager: FindByEmailAsync() UserManager->>Database: Query User Database-->>UserManager: User Data UserManager->>UserManager: CheckPasswordAsync() - UserManager-->>OpenIddict: User Validated - OpenIddict->>OpenIddict: Generate Tokens (JWT) - OpenIddict-->>AuthController: Token Response + UserManager-->>IdentityServer: User Validated + IdentityServer->>IdentityServer: Generate Tokens (JWT) + IdentityServer-->>AuthController: Token Response AuthController-->>Client: access_token + refresh_token Note over Client,Database: Using Access Token Client->>AuthController: GET /api/v1/users/me
Authorization: Bearer {token} - AuthController->>OpenIddict: Validate JWT - OpenIddict-->>AuthController: Claims Principal + AuthController->>IdentityServer: Validate JWT + IdentityServer-->>AuthController: Claims Principal AuthController-->>Client: User Data ``` @@ -200,13 +200,13 @@ erDiagram uuid RoleId PK,FK } - OpenIddictTokens { + IdentityServerPersistedGrants { uuid Id PK - uuid ApplicationId FK - uuid AuthorizationId FK + string Key UK string Type - string Status - datetime ExpirationDate + string ClientId + datetime CreationTime + datetime Expiration } AspNetUsers ||--o{ UserStatuses : has @@ -251,7 +251,7 @@ graph TD subgraph "Authentication" JWT[JWT Bearer Tokens] RS256[RS256 Signing] - OIDC[OpenIddict Server] + OIDC[IdentityServer] end subgraph "Authorization" @@ -527,7 +527,7 @@ sequenceDiagram ## References -- [OpenIddict Documentation](https://documentation.openiddict.com/) +- [Duende IdentityServer Documentation](https://docs.duendesoftware.com/identityserver/v7/) - [ASP.NET Core Identity](https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity) - [OAuth2 Specification](https://oauth.net/2/) - [eShopOnContainers](https://github.com/dotnet-architecture/eShopOnContainers) diff --git a/services/iam-service-net/docs/en/README.md b/services/iam-service-net/docs/en/README.md index 080f581f..cadc666f 100644 --- a/services/iam-service-net/docs/en/README.md +++ b/services/iam-service-net/docs/en/README.md @@ -1,12 +1,12 @@ # IAM Service .NET 10 -> Identity and Access Management Service built with .NET 10, ASP.NET Core Identity, and OpenIddict following DDD, CQRS, and Clean Architecture patterns. +> Identity and Access Management Service built with .NET 10, ASP.NET Core Identity, and **Duende IdentityServer** following DDD, CQRS, and Clean Architecture patterns. ## Overview This service provides OAuth2/OpenID Connect authentication and authorization: -- **OAuth2/OIDC Server** - OpenIddict for token management +- **OAuth2/OIDC Server** - Duende IdentityServer for token management - **User Management** - Registration, profile, soft-delete - **Role-Based Access Control** - User roles and permissions - **Token Management** - Access (15 min), Refresh (7 days) tokens @@ -19,7 +19,7 @@ This service provides OAuth2/OpenID Connect authentication and authorization: |------------|---------| | .NET 10 | Runtime | | ASP.NET Core Identity | User/Role management | -| OpenIddict | OAuth2/OIDC server | +| Duende IdentityServer | OAuth2/OIDC server | | EF Core + PostgreSQL | Data persistence | | Redis | Distributed caching | | MediatR | CQRS pattern | @@ -137,9 +137,11 @@ curl -X POST http://localhost:5001/api/v1/auth/register \ curl -X POST http://localhost:5001/connect/token \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=password" \ + -d "client_id=password-client" \ + -d "client_secret=password-client-secret" \ -d "username=user@example.com" \ -d "password=Password123!" \ - -d "scope=openid profile email offline_access" + -d "scope=openid profile email api offline_access" ``` **Response:** @@ -374,7 +376,7 @@ docker run -p 5001:8080 --env-file .env goodgo/iam-service:latest ## Resources -- [OpenIddict Documentation](https://documentation.openiddict.com/) +- [Duende IdentityServer Documentation](https://docs.duendesoftware.com/identityserver/v7/) - [ASP.NET Core Identity](https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity) - [OAuth2 Specification](https://oauth.net/2/) - [eShopOnContainers](https://github.com/dotnet-architecture/eShopOnContainers) diff --git a/services/iam-service-net/docs/vi/ARCHITECTURE.md b/services/iam-service-net/docs/vi/ARCHITECTURE.md index 5e40fc2d..ef373b61 100644 --- a/services/iam-service-net/docs/vi/ARCHITECTURE.md +++ b/services/iam-service-net/docs/vi/ARCHITECTURE.md @@ -1,6 +1,6 @@ # Kiến Trúc IAM Service -> Tài liệu kiến trúc cho IAM Service (Quản lý Danh tính và Truy cập) xây dựng với .NET 10, OpenIddict, và Clean Architecture. +> Tài liệu kiến trúc cho IAM Service (Quản lý Danh tính và Truy cập) xây dựng với .NET 10, **Duende IdentityServer**, và Clean Architecture. ## Tổng Quan Kiến Trúc @@ -34,7 +34,7 @@ graph TB subgraph "Infrastructure" CTX[Identity DbContext] REPO[Repositories] - OIDDICT[OpenIddict] + IDSERVER[Duende IdentityServer] end subgraph "External" @@ -49,21 +49,21 @@ graph TB AUTH --> QRY USR --> CMD USR --> QRY - TOK --> OIDDICT + TOK --> IDSERVER CMD --> VAL CMD --> BHV CMD --> USER QRY --> REPO USER --> EVT REPO --> CTX - OIDDICT --> CTX + IDSERVER --> CTX CTX --> DB CTX --> REDIS style AUTH fill:#4a90d9,stroke:#2d5986,color:#fff style USER fill:#50c878,stroke:#2d8659,color:#fff style DB fill:#ff6b6b,stroke:#c0392b,color:#fff - style OIDDICT fill:#9b59b6,stroke:#7d3c98,color:#fff + style IDSERVER fill:#9b59b6,stroke:#7d3c98,color:#fff ``` ## Luồng Xác Thực OAuth2 @@ -72,28 +72,28 @@ graph TB sequenceDiagram participant Client participant AuthController - participant OpenIddict + participant IdentityServer participant UserManager participant Database Note over Client,Database: Password Grant Flow (Đăng nhập) Client->>AuthController: POST /connect/token
grant_type=password - AuthController->>OpenIddict: Validate Request - OpenIddict->>UserManager: FindByEmailAsync() + AuthController->>IdentityServer: Validate Request + IdentityServer->>UserManager: FindByEmailAsync() UserManager->>Database: Query User Database-->>UserManager: User Data UserManager->>UserManager: CheckPasswordAsync() - UserManager-->>OpenIddict: User Validated - OpenIddict->>OpenIddict: Tạo Tokens (JWT) - OpenIddict-->>AuthController: Token Response + UserManager-->>IdentityServer: User Validated + IdentityServer->>IdentityServer: Tạo Tokens (JWT) + IdentityServer-->>AuthController: Token Response AuthController-->>Client: access_token + refresh_token Note over Client,Database: Sử dụng Access Token Client->>AuthController: GET /api/v1/users/me
Authorization: Bearer {token} - AuthController->>OpenIddict: Validate JWT - OpenIddict-->>AuthController: Claims Principal + AuthController->>IdentityServer: Validate JWT + IdentityServer-->>AuthController: Claims Principal AuthController-->>Client: User Data ``` @@ -200,13 +200,13 @@ erDiagram uuid RoleId PK,FK } - OpenIddictTokens { + IdentityServerPersistedGrants { uuid Id PK - uuid ApplicationId FK - uuid AuthorizationId FK + string Key UK string Type - string Status - datetime ExpirationDate + string ClientId + datetime CreationTime + datetime Expiration } AspNetUsers ||--o{ UserStatuses : có @@ -251,7 +251,7 @@ graph TD subgraph "Authentication" JWT[JWT Bearer Tokens] RS256[RS256 Signing] - OIDC[OpenIddict Server] + OIDC[IdentityServer] end subgraph "Authorization" @@ -527,7 +527,7 @@ sequenceDiagram ## Tài Liệu Tham Khảo -- [OpenIddict Documentation](https://documentation.openiddict.com/) +- [Duende IdentityServer Documentation](https://docs.duendesoftware.com/identityserver/v7/) - [ASP.NET Core Identity](https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity) - [OAuth2 Specification](https://oauth.net/2/) - [eShopOnContainers](https://github.com/dotnet-architecture/eShopOnContainers) diff --git a/services/iam-service-net/docs/vi/README.md b/services/iam-service-net/docs/vi/README.md index 94f2fdc1..8f2928f5 100644 --- a/services/iam-service-net/docs/vi/README.md +++ b/services/iam-service-net/docs/vi/README.md @@ -1,12 +1,12 @@ # IAM Service .NET 10 -> **Service IAM (Identity and Access Management) .NET 10 với OAuth2/OIDC sử dụng OpenIddict.** +> **Service IAM (Identity and Access Management) .NET 10 với OAuth2/OIDC sử dụng Duende IdentityServer.** ## Tổng Quan IAM Service cung cấp các chức năng quản lý danh tính và truy cập: -- **OAuth2/OIDC** - Authentication với OpenIddict +- **OAuth2/OIDC** - Authentication với Duende IdentityServer - **User Management** - CRUD operations cho users - **Password Management** - Đổi mật khẩu - **Token Management** - Issue, refresh, revoke tokens @@ -161,9 +161,11 @@ curl -X POST http://localhost:5001/api/v1/auth/register \ curl -X POST http://localhost:5001/connect/token \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=password" \ + -d "client_id=password-client" \ + -d "client_secret=password-client-secret" \ -d "username=user@example.com" \ -d "password=Password123!" \ - -d "scope=openid profile email offline_access" + -d "scope=openid profile email api offline_access" ``` **Response:** @@ -348,6 +350,6 @@ docker run -p 5001:8080 --env-file .env goodgo/iam-service:latest ## Tài Nguyên -- [OpenIddict Documentation](https://documentation.openiddict.com/) +- [Duende IdentityServer Documentation](https://docs.duendesoftware.com/identityserver/v7/) - [ASP.NET Core Identity](https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity) - [OAuth2 Specification](https://oauth.net/2/)