Autentizace¶
API podporuje dvě metody přihlášení. Nová metoda vrací JWT token, starý endpoint je označen jako obsolete.
POST /api/auth/login¶
Aktuální přihlašovací endpoint. Vrací JWT access token a refresh token.
Request¶
| Pole | Typ | Popis |
|---|---|---|
userId |
string | ID uživatele (číselné jako string) |
pin |
string | PIN uživatele (4–6 číslic) |
Response 200 OK¶
{
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refreshToken": "base64encodedRefreshToken==",
"expiresIn": 28800,
"user": {
"id": 123,
"userName": "jnovak",
"fullName": "Jan Novák"
}
}
| Pole | Typ | Popis |
|---|---|---|
accessToken |
string | JWT Bearer token (platný expiresIn sekund) |
refreshToken |
string | Token pro obnovení přístupu |
expiresIn |
int | Platnost v sekundách (výchozí: 28 800 = 8 hodin) |
user.id |
long | ID uživatele |
user.userName |
string | Přihlašovací jméno |
user.fullName |
string | Celé jméno |
Response 401 Unauthorized¶
{ "message": "Uživatel nenalezen." }
{ "message": "Účet není aktivní." }
{ "message": "Neplatné přihlašovací údaje." }
Použití tokenu¶
Přidejte Authorization header ke každému chráněnému požadavku:
JWT Claims¶
Token obsahuje tyto standardní claims:
| Claim | Zdroj | Popis |
|---|---|---|
sub (NameIdentifier) |
ApplicationUser.Id |
Identifikátor uživatele |
name |
FirstName + " " + LastName |
Celé jméno |
userName |
ApplicationUser.UserName |
Přihlašovací jméno |
role |
ASP.NET Identity role | Přiřazené role (Admin, Manager, User…) |
Přístup k ID přihlášeného uživatele v controlleru:
// V controlleru dědicím z BaseApiController:
var userId = CurrentUserId; // string — hodnota sub claim
POST /api/login ⚠️ OBSOLETE¶
Starý endpoint zachovaný pro zpětnou kompatibilitu s mobilní aplikací. Pouze ověří PIN, nevrací token.
Nepoužívat pro nové integrace. Použijte /api/auth/login.
Konfigurace JWT¶
appsettings.json (Eva.Mobile.WebApi):
"Jwt": {
"Issuer": "Eva.Mobile.WebApi",
"Audience": "Eva.Mobile",
"SecretKey": "<min. 32 znaků>",
"TokenExpirationHours": 8
}
Produkce
SecretKey musí být nastaven přes proměnnou prostředí JWT_SECRET_KEY. Nikdy nedávejte produkční klíč do appsettings.json.
Ochrana vlastních endpointů¶
Nové controllery dědí z BaseApiController:
[ApiController]
[Route("api/[controller]")]
public class MyController : BaseApiController
{
// CurrentUserId — ID přihlášeného uživatele z JWT claims
// Automaticky vyžaduje platný JWT přes [Authorize]
}
Architektura¶
POST /api/auth/login
└── AuthController.Login()
├── UserManager.FindByIdAsync() — ověření userId
├── PasswordHasher.VerifyHash() — ověření PIN
└── JwtTokenService.GenerateTokensAsync()
└── UserManager.GetRolesAsync() — přidá role do claims
Klíčové soubory:
| Soubor | Popis |
|---|---|
Controllers/AuthController.cs |
Login endpoint |
Controllers/BaseApiController.cs |
Abstraktní základ s [Authorize] |
Services/JwtTokenService.cs |
Generování JWT a refresh tokenů |
Controllers/LoginController.cs |
Starý endpoint (obsolete) |