Finishes functional design for unit 0 (back-end changes before front-end work)
This commit is contained in:
+93
@@ -0,0 +1,93 @@
|
||||
# Business Logic Model — Unit 0: Backend Prerequisites
|
||||
|
||||
## Overview
|
||||
|
||||
Unit 0 modifies the authentication flow to use httpOnly cookies for refresh token delivery and adds CORS support for the React SPA. No new business transactions are introduced — existing auth transactions are made more secure.
|
||||
|
||||
---
|
||||
|
||||
## Flow 1: Login
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant FE as Frontend
|
||||
participant AC as AuthController
|
||||
participant AS as AuthService
|
||||
participant DB as Database
|
||||
|
||||
FE->>AC: POST /auth/login
|
||||
AC->>AS: AuthenticateAsync()
|
||||
AS->>DB: FindUser + ValidatePassword
|
||||
DB-->>AS: User + Role
|
||||
AS-->>AC: TokenResponse
|
||||
AC-->>FE: 200 accessToken + Set-Cookie refreshToken
|
||||
```
|
||||
|
||||
**Changes from current behaviour**:
|
||||
- `RefreshToken` is no longer returned in the response body
|
||||
- httpOnly cookie is set on the response
|
||||
- `UserDto` with `Name` (DisplayName ?? Email) is added to response
|
||||
|
||||
---
|
||||
|
||||
## Flow 2: Refresh Token
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant FE as Frontend
|
||||
participant AC as AuthController
|
||||
participant AS as AuthService
|
||||
participant DB as Database
|
||||
|
||||
FE->>AC: POST /auth/refresh (cookie auto-sent)
|
||||
AC->>AC: Read cookie refreshToken
|
||||
AC->>AS: RefreshTokenAsync(cookieValue)
|
||||
AS->>DB: Validate RefreshToken
|
||||
DB-->>AS: Valid + User
|
||||
AS-->>AC: new TokenResponse
|
||||
AC-->>FE: 200 new accessToken + Set-Cookie new refreshToken
|
||||
```
|
||||
|
||||
**Changes from current behaviour**:
|
||||
- Request body (`RefreshTokenRequest`) is **removed** — token read from cookie only
|
||||
- New refresh token set in cookie (rotation still applies)
|
||||
|
||||
---
|
||||
|
||||
## Flow 3: Revoke (Logout)
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant FE as Frontend
|
||||
participant AC as AuthController
|
||||
participant AS as AuthService
|
||||
participant DB as Database
|
||||
|
||||
FE->>AC: POST /auth/revoke (no Authorize)
|
||||
AC->>AC: Read cookie refreshToken
|
||||
AC->>AS: RevokeTokenAsync(cookieValue)
|
||||
AS->>DB: Mark token revoked
|
||||
DB-->>AS: OK
|
||||
AC->>AC: Clear cookie Expires=epoch
|
||||
AC-->>FE: 204 No Content
|
||||
```
|
||||
|
||||
**Changes from current behaviour**:
|
||||
- `[Authorize]` attribute removed — logout works even if access token has expired
|
||||
- Token read from cookie, not request body
|
||||
- Cookie explicitly cleared in response
|
||||
|
||||
---
|
||||
|
||||
## Flow 4: CORS Preflight
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant Browser
|
||||
participant API as API
|
||||
|
||||
Browser->>API: OPTIONS /auth/login preflight
|
||||
API-->>Browser: 204 Access-Control-Allow headers
|
||||
Browser->>API: POST /auth/login with credentials
|
||||
API-->>Browser: 200 + Set-Cookie
|
||||
```
|
||||
Reference in New Issue
Block a user