This is an Angular 17 standalone application that demonstrates user authentication, role-based access control, and token refresh using CanActivateFn
for guards and HttpInterceptorFn
for interceptors.
- User login and registration
- Auth guard for protecting routes
- Role guard for role-based access control
- Refresh token mechanism to maintain user sessions
- Standalone Angular configuration without
app.module.ts
- Node.js (v14 or higher recommended)
- Angular CLI (v17 or higher)
- Clone the repository:
git clone https://github.com/onurtpl/Dotnet8-Angular17-JWT-Authentication-Authorization.git cd Dotnet8-Angular17-JWT-Authentication-Authorization/frontend npm install
- Run backend:
cd Dotnet8-Angular17-JWT-Authentication-Authorization/backend/API
dotnet watch run
- Run frontend:
cd Dotnet8-Angular17-JWT-Authentication-Authorization/frontend
ng serve -o
|—backend/
|—|–API/
|—|—|—Configurations/
|—|—|—|—APIConfigurations.cs
|—|—|—|—ApplicationConfigurations.cs
|—|—|—|—InfrastructureConfigurations.cs
|—|—|—|—RepositoryConfigurations.cs
|—|—|–─-Controllers/
|—|—|—|—Abstractions/
|—|—|—|—|—ApiController.cs
|—|—|—|—AuthController.cs
|—|—|—|—RoleController.cs
|—|—|—|—UserController.cs
|—|—|—Middlewares/
|—|—|—|—ExceptionMiddleware.cs
|—|—|—Models/
|—|—|—|—ErrorResultModel.cs
|—|—|—|—ErrorStatusCodeModel.cs
|—|—|—|—ValidationErrorDetailsModel.cs
|—|—|—Program.cs
|—|—|—API.csproj
|—|—|—appsettings.json
|—|—|—appsettings.Development.json
|—|—Application/
|—|—|—Behaviors/
|—|—|—|—CustomValidationBehavior.cs
|—|—|—Contracts/
|—|—|—|—IdentityContracts/
|—|—|—|—|—IIdentityRepository.cs
|—|—|—|—MailContracts/
|—|—|—|—|—IMailRepository.cs
|—|—|—Dtos/
|—|—|—|—PaginationDtos/
|—|—|—|—|—PaginationRequestDto.cs
|—|—|—|—|—PaginationResponseDto.cs
|—|—|—|—AuthResponseDto.cs
|—|—|—Features/
|—|—|—|—Application/
|—|—|—|—Identity/
|—|—|—|—|—Commands/
|—|—|—|—|—|—AssignRole/
|—|—|—|—|—|—|—AssignRoleCommand.cs
|—|—|—|—|—|—|—AssignRoleCommandHandler.cs
|—|—|—|—|—|—|—AssignRoleCommandValidator.cs
|—|—|—|—|—|—CreateRole/
|—|—|—|—|—|—|—CreateRoleCommand.cs
|—|—|—|—|—|—|—CreateRoleCommandHandler.cs
|—|—|—|—|—|—|—CreateRoleCommandValidator.cs
|—|—|—|—|—|—ForgotPassword/
|—|—|—|—|—|—|—ForgotPasswordCommand.cs
|—|—|—|—|—|—|—ForgotPasswordCommandHandler.cs
|—|—|—|—|—|—|—ForgotPasswordCommandValidator.cs
|—|—|—|—|—|—GetUsers/
|—|—|—|—|—|—|—GetUsersCommand.cs
|—|—|—|—|—|—|—GetUsersCommandHandler.cs
|—|—|—|—|—|—|—GetUsersCommandResult.cs
|—|—|—|—|—|—Login/
|—|—|—|—|—|—|—LoginCommand.cs
|—|—|—|—|—|—|—LoginCommandHandler.cs
|—|—|—|—|—|—|—LoginCommandValidator.cs
|—|—|—|—|—|—RefreshToken/
|—|—|—|—|—|—|—RefreshTokenCommand.cs
|—|—|—|—|—|—|—RefreshTokenCommandHandler.cs
|—|—|—|—|—|—|—RefreshTokenCommandValidator.cs
|—|—|—|—|—|—Register/
|—|—|—|—|—|—|—RegisterCommand.cs
|—|—|—|—|—|—|—RegisterCommandHandler.cs
|—|—|—|—|—|—|—RegisterCommandValidator.cs
|—|—|—|—|—|—ResetPassword/
|—|—|—|—|—|—|—ResetPasswordCommand.cs
|—|—|—|—|—|—|—ResetPasswordCommandHandler.cs
|—|—|—|—|—|—|—ResetPasswordCommandValidator.cs
|—|—|—|—|—Queries/
|—|—|—|—|—|—GetRoles/
|—|—|—|—|—|—|—GetRolesQuery.cs
|—|—|—|—|—|—|—GetRolesQueryHandler.cs
|—|—|—|—|—|—|—GetRolesQueryResult.cs
|—|—|—|—Application.csproj
|—|—|—|—ApplicationAssembly.cs
|—|—Domain/
|—|—|—Entities/
|—|—|—|—Abstractions/
|—|—|—|—|—BaseEntity.cs
|—|—|—|—Errors/
|—|—|—|—|—ErrorLog.cs
|—|—|—|—IdentityEntities/
|—|—|—|—|—ApplicationRole.cs
|—|—|—|—|—ApplicationUser.cs
|—|—|—Domain.csproj
|—|—Infrastructure/
|—|—|—Configurations/
|—|—|—|—ApplicationRoleConfiguration.cs
|—|—|—|—ApplicationUserConfiguration.cs
|—|—|—|—ErrorLogConfiguration.cs
|—|—|—Context/
|—|—|—|—ApplicationDbContext.cs
|—|—|—Implementations/
|—|—|—|—ApplicationImplementations/
|—|—|—|—IdentityImplementations/
|—|—|—|—|—IdentityRepository.cs
|—|—|—|—MailImplementations/
|—|—|—|—|—MailRepository.cs
|—|—|—Initializations/
|—|—|—|—SeedUserAndRole.cs
|—|—|—Mapping/
|—|—|—|—MappingProfile.cs
|—|—Infrastructure.csproj
|—|—backend.sln
src/
|—frontend/
|—|—src/
|—|—|—app/
|—|—|—|—common/
|—|—|—|—|—components/
|—|—|—|—|—|—footer/
|—|—|—|—|—|—|—footer.component.html
|—|—|—|—|—|—|—footer.component.scss
|—|—|—|—|—|—|—footer.component.ts
|—|—|—|—|—|—image-hover-card/
|—|—|—|—|—|—|—image-hover-card.component.html
|—|—|—|—|—|—|—image-hover-card.component.scss
|—|—|—|—|—|—|—image-hover-card.component.ts
|—|—|—|—|—|—navbar/
|—|—|—|—|—|—|—navbar.component.html
|—|—|—|—|—|—|—navbar.component.scss
|—|—|—|—|—|—|—navbar.component.ts
|—|—|—|—|—|—reactive-text-input/
|—|—|—|—|—|—|—reactive-text-input.component.htm
l
|—|—|—|—|—|—|—reactive-text-input.component.scs
s
|—|—|—|—|—|—|—reactive-text-input.component.ts
|—|—|—|—|—directives/
|—|—|—|—|—|—toggle-password.directive.ts
|—|—|—|—|—guards/
|—|—|—|—|—|—auth.guard.ts
|—|—|—|—|—|—role.guard.ts
|—|—|—|—|—interceptors/
|—|—|—|—|—|—auth.interceptor.ts
|—|—|—|—|—interfaces/
|—|—|—|—|—|—jwt-payload.ts
|—|—|—|—|—|—pagination-request.ts
|—|—|—|—|—|—pagination-response.ts
|—|—|—|—|—|—user-response.ts
|—|—|—|—|—modules/
|—|—|—|—|—|—app-common/
|—|—|—|—|—|—|—app-common.module.ts
|—|—|—|—|—|—material-form-shared/
|—|—|—|—|—|—|—material-form-shared.module.ts
|—|—|—|—|—services/
|—|—|—|—|—|—generic-http.service.ts
|—|—|—|—|—|—notification.service.ts
|—|—|—|—layouts/
|—|—|—|—|—admin/
|—|—|—|—|—|—pages/
|—|—|—|—|—|—|—user-detail/
|—|—|—|—|—|—|—|—user-detail.component.html
|—|—|—|—|—|—|—|—user-detail.component.scss
|—|—|—|—|—|—|—|—user-detail.component.ts
|—|—|—|—|—|—user-list/
|—|—|—|—|—|—|—|—user-list.component.html
|—|—|—|—|—|—|—|—user-list.component.scss
|—|—|—|—|—|—|—|—user-list.component.ts
|—|—|—|—|—|—services/
|—|—|—|—|—|—|—admin.service.ts
|—|—|—|—|—|—admin.component.html
|—|—|—|—|—|—admin.component.scss
|—|—|—|—|—|—admin.component.ts
|—|—|—|—|—|—admin.routes.ts
|—|—|—|—|—auth/
|—|—|—|—|—|—interfaces/
|—|—|—|—|—|—|—auth-response.ts
|—|—|—|—|—|—|—forgot-password-request.ts
|—|—|—|—|—|—|—login-request.ts
|—|—|—|—|—|—|—refresh-token-request.ts
|—|—|—|—|—|—|—register-request.ts
|—|—|—|—|—|—|—reset-password-request.ts
|—|—|—|—|—|—pages/
|—|—|—|—|—|—|—forgot-password/
|—|—|—|—|—|—|—|—forgot-password.component.htm
l
|—|—|—|—|—|—|—|—forgot-password.component.scs
s
|—|—|—|—|—|—|—|—forgot-password.component.ts
|—|—|—|—|—|—|—login/
|—|—|—|—|—|—|—|—login.component.html
|—|—|—|—|—|—|—|—login.component.scss
|—|—|—|—|—|—|—|—login.component.ts
|—|—|—|—|—|—|—register/
|—|—|—|—|—|—|—|—register.component.html
|—|—|—|—|—|—|—|—register.component.scss
|—|—|—|—|—|—|—|—register.component.ts
|—|—|—|—|—|—|—reset-password/
|—|—|—|—|—|—|—|—register.component.html
|—|—|—|—|—|—|—|—register.component.scss
|—|—|—|—|—|—|—|—register.component.ts
|—|—|—|—|—|—services/
|—|—|—|—|—|—|—auth.service.ts
|—|—|—|—|—|—auth.component.html
|—|—|—|—|—|—auth.component.scss
|—|—|—|—|—|—auth.component.ts
|—|—|—|—|—|—auth.routes.ts
|—|—|—|—|—home/
|—|—|—|—|—|—pages/
|—|—|—|—|—|—|—home-detail/
|—|—|—|—|—|—|—|—home-detail.component.html
|—|—|—|—|—|—|—|—home-detail.component.scss
|—|—|—|—|—|—|—home-main/
|—|—|—|—|—|—|—|—home-main.component.html
|—|—|—|—|—|—|—|—home-main.component.scss
|—|—|—|—|—|—|—|—home-main.component.ts
|—|—|—|—|—home.component.html
|—|—|—|—|—home.component.scss
|—|—|—|—|—home.component.ts
|—|—|—|—|—home.routes.ts
|—|—|—|—not-found/
|—|—|—|—|—not-found.component.html
|—|—|—|—|—not-found.component.scss
|—|—|—|—app.component.html
|—|—|—|—app.component.scss
|—|—|—|—app.component.ts
|—|—|—|—app.config.ts
|—|—|—|—app.routes.ts
|—|—assets/
|—|—|—images/
|—|—|—|—kodlama.png
|—|—environments/
|—|—|—environment.development.ts
|—|—|—environment.prod.ts
|—|—|—environment.ts
https://github.com/onurtpl/Dotnet8-Angular17-JWT-Authentication-Authorization
Leave a Reply