Security ichiga quyidagilar kiradi: OAuth 2.0, OpenID Connect, JWT internals, Spring Security OAuth Resource Server, OWASP Top 10, Secrets management, Cryptography — JCA/JCE.
1. Security nima?
Security — ilovani, foydalanuvchi ma’lumotlarini, API’larni, tokenlarni, parollarni va biznes jarayonlarni himoya qilish.
Backend security faqat login-parol emas. Senior Java developer quyidagilarni tushunishi kerak:
Authentication
Authorization
Token security
Password hashing
API protection
Input validation
SQL injection
XSS
CSRF
Secrets management
Encryption
Transport security
Audit logging
Rate limitingOddiy qilib:
Security — “kim kirdi?”, “nima qila oladi?”, “ma’lumot xavfsizmi?”, “tizimni aldab bo‘ladimi?” degan savollarga javob.
2. Authentication va Authorization farqi
Bu juda muhim farq.
Authentication
Authentication — foydalanuvchi kimligini aniqlash.
Savol:
Siz kimsiz?Misol:
Login: ali
Password: ****Agar login va parol to‘g‘ri bo‘lsa, tizim biladi:
Bu Ali.Authorization
Authorization — foydalanuvchining nima qilishga ruxsati borligini tekshirish.
Savol:
Siz buni qila olasizmi?Masalan:
Ali oddiy user.
Ali admin panelga kira olmaydi.Kodda:
@PreAuthorize("hasRole('ADMIN')")
@GetMapping("/admin/users")
public List<UserDto> getUsers() {
return userService.getUsers();
}Bu yerda foydalanuvchi login qilgan bo‘lsa ham, ADMIN bo‘lmasa kira olmaydi.
3. Session-based authentication
An’anaviy web ilovalarda session ishlatiladi.
Flow:
1. User login qiladi
2. Server session yaratadi
3. Browserga session cookie beradi
4. Keyingi requestlarda cookie yuboriladi
5. Server session orqali userni taniydiKo‘rinishi:
Browser → Cookie: JSESSIONID=abc123 → ServerAfzalliklari:
web app uchun qulay;
server sessionni nazorat qiladi;
logout qilish oson;
cookie HttpOnly bo‘lsa xavfsizroq.
Kamchiliklari:
serverda session saqlanadi;
horizontal scalingda session sharing kerak;
mobile/API uchun har doim qulay emas.
4. Token-based authentication
REST API va microservice’da ko‘pincha token ishlatiladi.
Flow:
1. User login qiladi
2. Server access token beradi
3. Client tokenni saqlaydi
4. Har requestda Authorization header bilan yuboradiMisol:
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...Server tokenni tekshiradi va userni aniqlaydi.
5. OAuth 2.0
OAuth 2.0 — authorization framework.
U “foydalanuvchi nomidan boshqa ilovaga cheklangan ruxsat berish” uchun ishlatiladi.
Masalan:
Siz bir appga Google account orqali kirdingiz.
App sizning Google parolingizni bilmaydi.
Google appga token beradi.
App token orqali faqat ruxsat berilgan ma’lumotga kira oladi.Muhim:
OAuth 2.0 authentication emas, authorization uchun yaratilgan.
Lekin real hayotda login flow’larda OpenID Connect bilan birga ishlatiladi.
5.1. OAuth 2.0 asosiy rollari
Role | Ma’nosi |
|---|---|
Resource Owner | Foydalanuvchi |
Client | Token so‘rayotgan ilova |
Authorization Server | Token beruvchi server |
Resource Server | Himoyalangan API |
Misol:
User — Resource Owner
Mobile app — Client
Keycloak/Auth0/Google — Authorization Server
Backend API — Resource Server5.2. OAuth 2.0 flow
Oddiy ko‘rinish:
User
↓
Client App
↓
Authorization Server
↓
Access Token
↓
Resource Server APIClient API’ga request qiladi:
GET /api/orders
Authorization: Bearer access_tokenResource Server tokenni tekshiradi.
6. OpenID Connect
OpenID Connect — OIDC OAuth 2.0 ustiga qurilgan authentication layer.
OAuth 2.0:
Ruxsat berishOIDC:
User kimligini aniqlashOIDC id_token tushunchasini olib keladi.
6.1. Access token vs ID token
Token | Nima uchun |
|---|---|
Access token | API’ga kirish uchun |
ID token | User kimligini clientga bildirish uchun |
Muhim qoida:
Backend API odatda
access_tokenni tekshiradi.id_tokenAPI chaqirish uchun ishlatilmaydi.
7. JWT nima?
JWT — JSON Web Token. Token formatidir.
JWT uch qismdan iborat:
header.payload.signatureMasalan:
xxxxx.yyyyy.zzzzz7.1. Header
Header token algoritmini bildiradi:
{
"alg": "RS256",
"typ": "JWT"
}7.2. Payload
Payload ichida claimlar bo‘ladi:
{
"sub": "123",
"email": "ali@example.com",
"roles": ["USER"],
"iat": 1710000000,
"exp": 1710003600
}Muhim claimlar:
Claim | Ma’nosi |
|---|---|
sub | User ID |
iat | Issued at |
exp | Expiration |
iss | Issuer |
aud | Audience |
scope | Ruxsatlar |
roles | Rollar |
7.3. Signature
Signature tokenni o‘zgartirilmaganini tekshiradi.
HMACSHA256(
base64UrlEncode(header) + "." + base64UrlEncode(payload),
secret
)Yoki RSA/ECDSA private key bilan imzolanadi.
Muhim:
JWT payload shifrlanmagan. U faqat Base64URL encoded. Ichiga parol, karta raqami, maxfiy data yozilmaydi.
8. JWT algoritmlari
HS256
Bitta secret bilan imzolanadi va tekshiriladi.
sign secret = verify secretMos:
kichik tizimlar;
bitta backend;
ichki servis.
Xavfi:
secret tarqalsa, token yaratish ham mumkin;
microservice’da secretni ko‘p joyga tarqatish xavfli.
RS256
Private/public key ishlatiladi.
Private key → token imzolaydi
Public key → token tekshiradiMos:
microservice;
OAuth2/OIDC;
Keycloak/Auth0;
resource serverlar.
Afzalligi:
API servislar faqat public key biladi;
token yaratolmaydi, faqat tekshiradi;
xavfsizroq arxitektura.
9. JWT bilan ko‘p qilinadigan xatolar
Xato 1: Token ichiga sensitive data yozish
Yomon:
{
"userId": 1,
"password": "123456",
"cardNumber": "8600..."
}To‘g‘ri:
{
"sub": "1",
"roles": ["USER"],
"scope": "orders:read"
}Xato 2: Token expiration qo‘ymaslik
Yomon:
{
"sub": "1"
}To‘g‘ri:
{
"sub": "1",
"exp": 1710003600
}Access token qisqa yashashi kerak.
Masalan:
5–15 minutRefresh token esa uzoqroq yashashi mumkin, lekin kuchli himoyalanishi kerak.
Xato 3: Signature tekshirmaslik
JWT decode qilish yetarli emas.
Yomon:
String payload = decodeJwt(token);To‘g‘ri:
decode + verify signature + validate exp/iss/audXato 4: alg: none zaifligi
Eski yoki noto‘g‘ri kutubxonalarda token algoritmini noto‘g‘ri qabul qilish xavfli bo‘lgan.
Senior qoida:
Qaysi algoritmga ruxsat borligini server tomonda aniq belgilash kerak.
10. Spring Security
Spring Boot’da security uchun asosiy framework — Spring Security.
U quyidagilarni beradi:
authentication;
authorization;
filters;
CSRF protection;
password hashing;
OAuth2 login;
Resource Server;
method security;
security context.
11. Spring Security filter chain
Spring Security requestni filterlar orqali tekshiradi.
HTTP Request
↓
Security Filters
↓
Authentication
↓
Authorization
↓
ControllerMasalan:
BearerTokenAuthenticationFilter
UsernamePasswordAuthenticationFilter
AuthorizationFilter
ExceptionTranslationFilterSenior developer filter chain tushunchasini bilishi kerak, chunki ko‘p security muammolar shu yerda chiqadi.
12. Spring Security 6 config
Hozirgi Spring Boot loyihalarda SecurityFilterChain ishlatiladi.
@Configuration
@EnableMethodSecurity
public class SecurityConfig {
@Bean
SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http
.csrf(csrf -> csrf.disable())
.authorizeHttpRequests(auth -> auth
.requestMatchers("/api/auth/**").permitAll()
.requestMatchers("/api/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
)
.oauth2ResourceServer(oauth2 -> oauth2.jwt(Customizer.withDefaults()))
.build();
}
}Bu yerda:
.requestMatchers("/api/auth/**").permitAll()login/register endpointlari ochiq.
.requestMatchers("/api/admin/**").hasRole("ADMIN")admin endpoint faqat admin uchun.
.anyRequest().authenticated()qolgan hamma endpointlar login talab qiladi.
13. OAuth2 Resource Server
Agar backend API access token qabul qilsa, u Resource Server bo‘ladi.
Masalan:
Frontend → Backend API
Authorization: Bearer JWTSpring config:
spring:
security:
oauth2:
resourceserver:
jwt:
issuer-uri: http://localhost:8080/realms/demoYoki public key/JWK set:
spring:
security:
oauth2:
resourceserver:
jwt:
jwk-set-uri: http://localhost:8080/realms/demo/protocol/openid-connect/certsSpring tokenni:
signature;
expiration;
issuer;
format;
bo‘yicha tekshiradi.
14. Role va scope
OAuth2’da ko‘pincha scope ishlatiladi.
Masalan:
orders:read
orders:write
users:adminSpring’da scope odatda authority sifatida keladi:
SCOPE_orders:readMisol:
@PreAuthorize("hasAuthority('SCOPE_orders:read')")
@GetMapping("/orders")
public List<OrderDto> getOrders() {
return orderService.getOrders();
}Role esa:
@PreAuthorize("hasRole('ADMIN')")E’tibor:
hasRole('ADMIN') → ROLE_ADMIN qidiradi
hasAuthority('ADMIN') → ADMIN qidiradiBu ko‘p chalkashadigan joy.
15. Password hashing
Parolni hech qachon plain text saqlash mumkin emas.
Yomon:
user.setPassword(request.password());Yomonroq:
user.setPassword(Base64.encode(request.password()));Base64 hashing emas, encryption ham emas.
To‘g‘ri:
@Bean
PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}Saqlash:
String hash = passwordEncoder.encode(request.password());
user.setPassword(hash);Tekshirish:
passwordEncoder.matches(rawPassword, user.getPassword());15.1. Nega BCrypt?
BCrypt:
salt ishlatadi;
sekin ishlaydi;
brute force’ni qiyinlashtiradi;
password hashing uchun mos.
Productionda Argon2 ham kuchli variant.
Spring’da:
@Bean
PasswordEncoder passwordEncoder() {
return new Argon2PasswordEncoder(
16,
32,
1,
65536,
3
);
}16. CSRF
CSRF — Cross-Site Request Forgery.
Bu browser cookie asosida authentication ishlatganda xavfli.
Scenario:
User bank.uz saytiga login qilgan
Cookie browserda bor
User zararli saytga kirdi
Zararli sayt bank.uz/payment endpointiga request yubordi
Browser cookie’ni avtomatik qo‘shib yubordiAgar CSRF himoya bo‘lmasa, zararli request bajarilishi mumkin.
16.1. REST API’da CSRF kerakmi?
Agar siz:
Authorization: Bearer tokenishlatsangiz va tokenni cookie’da emas, headerda yuborsangiz, CSRF odatda kerak emas.
Shuning uchun ko‘p REST API’da:
.csrf(csrf -> csrf.disable())ishlatiladi.
Lekin agar cookie-based auth bo‘lsa, CSRF’ni o‘chirib qo‘yish xavfli.
17. CORS
CORS — browser qaysi frontend domain API’ga request qila olishini belgilaydi.
Masalan:
frontend: https://app.example.com
backend: https://api.example.comAgar CORS to‘g‘ri sozlanmasa, browser requestni bloklaydi.
Yomon:
@CrossOrigin("*")Productionda xavfli.
Yaxshiroq:
@Bean
CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration config = new CorsConfiguration();
config.setAllowedOrigins(List.of("https://app.example.com"));
config.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE"));
config.setAllowedHeaders(List.of("Authorization", "Content-Type"));
config.setAllowCredentials(true);
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config);
return source;
}18. OWASP Top 10 Java context
OWASP Top 10 — web ilovalardagi eng muhim security xavflar ro‘yxati.
Senior Java developer bularni real kodda taniy olishi kerak.
18.1. Broken Access Control
User o‘ziga tegishli bo‘lmagan ma’lumotni ko‘ra olsa.
Yomon:
@GetMapping("/orders/{id}")
public OrderDto getOrder(@PathVariable Long id) {
return orderService.getById(id);
}Bu yerda user boshqa userning orderini ID orqali ko‘rishi mumkin.
To‘g‘ri:
@GetMapping("/orders/{id}")
public OrderDto getOrder(@PathVariable Long id,
Authentication authentication) {
return orderService.getByIdForUser(id, authentication.getName());
}Service ichida:
public OrderDto getByIdForUser(Long orderId, String username) {
Order order = orderRepository.findByIdAndUsername(orderId, username)
.orElseThrow(() -> new AccessDeniedException("Access denied"));
return mapper.toDto(order);
}18.2. Injection
SQL injection — user input SQL queryga noto‘g‘ri qo‘shilganda.
Yomon:
String sql = "SELECT * FROM users WHERE email = '" + email + "'";Agar email:
'a' OR '1'='1bo‘lsa, query buziladi.
To‘g‘ri:
@Query("select u from User u where u.email = :email")
Optional<User> findByEmail(@Param("email") String email);Yoki JDBC:
PreparedStatement ps = connection.prepareStatement(
"SELECT * FROM users WHERE email = ?"
);
ps.setString(1, email);18.3. Cryptographic failures
Maxfiy ma’lumotlar noto‘g‘ri saqlansa yoki uzatilsa.
Xatolar:
HTTP ishlatish;
parolni plain text saqlash;
zaif encryption algoritm;
hardcoded secret;
tokenni logga chiqarish.
Yomon:
log.info("JWT token: {}", token);To‘g‘ri:
log.info("User authenticated: {}", userId);18.4. Security misconfiguration
Noto‘g‘ri sozlamalar.
Misollar:
default admin password;
actuator endpointlar ochiq;
stack trace productionda ko‘rinadi;
CORS
*;debug mode yoqilgan;
H2 console productionda ochiq.
Spring Actuator uchun ehtiyot bo‘lish kerak:
management:
endpoints:
web:
exposure:
include: health,info,metrics,prometheusenv, beans, heapdump, threaddump kabi endpointlarni ochiq qoldirish xavfli.
18.5. Vulnerable dependencies
Kutubxonalarda zaiflik bo‘lishi mumkin.
Masalan:
Eski log4j
Eski jackson
Eski spring-security
Eski nettyAmaliy himoya:
dependency update;
OWASP Dependency Check;
Snyk;
GitHub Dependabot;
Trivy;
Maven/Gradle audit.
Maven plugin misol:
<plugin>
<groupId>org.owasp</groupId>
<artifactId>dependency-check-maven</artifactId>
<version>12.1.0</version>
</plugin>19. Secrets management
Secret — maxfiy qiymatlar.
Masalan:
DB password
JWT secret
API key
OAuth client secret
Private key
SMTP password
AWS access key
Telegram bot tokenYomon:
spring:
datasource:
password: mySuperPassword123Yoki:
private static final String SECRET = "abc123";Bu xavfli, chunki code repositoryga tushadi.
19.1. To‘g‘ri yondashuv
Secretlar quyida saqlanadi:
environment variables;
Kubernetes Secrets;
HashiCorp Vault;
AWS Secrets Manager;
GCP Secret Manager;
Azure Key Vault;
Doppler/1Password Secrets Automation.
Spring Boot’da:
spring:
datasource:
url: ${DB_URL}
username: ${DB_USERNAME}
password: ${DB_PASSWORD}Environment:
export DB_PASSWORD='strong-password'20. Encryption, hashing, encoding farqi
Bu uchalasi ko‘p aralashadi.
Tushuncha | Ma’nosi | Qaytarish mumkinmi? | Misol |
|---|---|---|---|
Encoding | Format o‘zgartirish | Ha | Base64 |
Hashing | Bir tomonlama fingerprint | Yo‘q | SHA-256, BCrypt |
Encryption | Shifrlash | Ha, key bilan | AES, RSA |
Encoding
hello → aGVsbG8=
Bu maxfiylik bermaydi.
Hashing
password → hashAsl parolni qaytarib bo‘lmaydi.
Encryption
plain text → encrypted text → plain textKey bo‘lsa qaytarish mumkin.
21. JCA/JCE
Java’da cryptography uchun asosiy API’lar:
JCA — Java Cryptography Architecture
JCE — Java Cryptography ExtensionUlar quyidagilar uchun ishlatiladi:
hashing;
encryption/decryption;
digital signature;
key generation;
certificate;
secure random.
21.1. SHA-256 misol
public static String sha256(String input) throws Exception {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(input.getBytes(StandardCharsets.UTF_8));
return HexFormat.of().formatHex(hash);
}Lekin parol uchun oddiy SHA-256 yetarli emas.
Parol uchun:
BCrypt / Argon2 / PBKDF221.2. AES encryption misol
public class AesService {
private static final String ALGORITHM = "AES/GCM/NoPadding";
public byte[] encrypt(byte[] plainText, SecretKey key, byte[] iv) throws Exception {
Cipher cipher = Cipher.getInstance(ALGORITHM);
GCMParameterSpec spec = new GCMParameterSpec(128, iv);
cipher.init(Cipher.ENCRYPT_MODE, key, spec);
return cipher.doFinal(plainText);
}
public byte[] decrypt(byte[] cipherText, SecretKey key, byte[] iv) throws Exception {
Cipher cipher = Cipher.getInstance(ALGORITHM);
GCMParameterSpec spec = new GCMParameterSpec(128, iv);
cipher.init(Cipher.DECRYPT_MODE, key, spec);
return cipher.doFinal(cipherText);
}
}AES-GCM afzalligi:
shifrlaydi;
integrity ham tekshiradi;
CBC’dan ko‘ra xavfsizroq ishlatish osonroq.
Muhim:
IV/nonce har encryption uchun unique bo‘lishi kerak. Keyni hardcode qilish mumkin emas.
22. API security checklist
Senior Java developer API uchun quyidagilarni tekshiradi:
Authentication bormi?
Authorization endpoint darajasida va object darajasida bormi?
JWT signature/exp/iss/aud tekshirilyaptimi?
Password BCrypt/Argon2 bilan hash qilinganmi?
Sensitive data logga chiqmayaptimi?
CORS production domainlarga cheklanganmi?
CSRF cookie auth ishlatilsa yoqilganmi?
Rate limiting bormi?
Input validation bormi?
SQL injectiondan himoya bormi?
Actuator endpointlar yopiqmi?
Secrets code ichida emasmi?
Dependency vulnerability scan bormi?
HTTPS majburiymi?
Audit log kerakli joylarda bormi?23. Object-level authorization
Ko‘p tizimlarda endpointni himoya qilish yetarli emas.
Masalan:
@PreAuthorize("hasRole('USER')")
@GetMapping("/users/{id}/profile")
public UserProfile getProfile(@PathVariable Long id) {
return userService.getProfile(id);
}Bu xato bo‘lishi mumkin. Chunki har qanday user boshqa user ID’sini berib ko‘rishi mumkin.
To‘g‘ri:
@GetMapping("/me/profile")
public UserProfile getMyProfile(Authentication authentication) {
return userService.getProfileByUsername(authentication.getName());
}Yoki object-level check:
@PreAuthorize("@userSecurity.isOwner(#id, authentication)")
@GetMapping("/users/{id}/profile")
public UserProfile getProfile(@PathVariable Long id) {
return userService.getProfile(id);
}24. Audit logging
Security’da ayrim actionlar log qilinishi kerak:
login success/failure;
password reset;
role changed;
payment action;
admin action;
token revoke;
suspicious activity.
Lekin sensitive data yozilmaydi:
Yomon:
User password changed from 123456 to qwertyTo‘g‘ri:
User 123 password changed by admin 7 at 2026-05-20T10:00:00Z25. Refresh token xavfsizligi
Access token qisqa yashaydi. Refresh token yangi access token olish uchun ishlatiladi.
Risk:
Refresh token o‘g‘irlansa, attacker uzoq vaqt kira oladi.Himoya:
refresh token rotation;
reuse detection;
secure storage;
HttpOnly Secure cookie;
device/session tracking;
revoke imkoniyati;
expiration;
suspicious login detection.
26. Rate limiting va brute force protection
Login endpoint himoyasiz bo‘lsa, brute force bo‘lishi mumkin.
Kerak:
IP bo‘yicha limit
username bo‘yicha limit
captcha yoki temporary lock
failed login count
alertMasalan:
5 failed login / 5 minutes → temporary blockLekin ehtiyot bo‘lish kerak: attacker boshqa odam username’ini lock qilib qo‘yishi ham mumkin. Shuning uchun balans kerak.
27. Real production security flow
Tasavvur qiling ecommerce backend:
Frontend
↓
Keycloak/Auth Server
↓
Backend API
↓
Order DBFlow:
1. User login qiladi
2. Auth Server JWT access token beradi
3. Frontend API’ga Bearer token yuboradi
4. Backend JWT signature tekshiradi
5. Backend role/scope tekshiradi
6. Backend object ownership tekshiradi
7. Request bajariladi
8. Audit log yoziladiOrder endpoint:
@PreAuthorize("hasAuthority('SCOPE_orders:read')")
@GetMapping("/orders/{id}")
public OrderDto getOrder(@PathVariable Long id,
Authentication authentication) {
return orderService.getOrderForCurrentUser(id, authentication.getName());
}Service:
public OrderDto getOrderForCurrentUser(Long orderId, String username) {
Order order = orderRepository.findByIdAndUsername(orderId, username)
.orElseThrow(() -> new AccessDeniedException("Access denied"));
return mapper.toDto(order);
}Bu yerda ikkita himoya bor:
Scope check
Object ownership check28. Senior darajadagi eng ko‘p xatolar
Xato 1: Faqat endpoint role bilan cheklash
Role bor, lekin user boshqa userning data’sini ko‘ra oladi.
Xato 2: JWT payloadga ishonib ketish
JWT decode qilingan, lekin signature tekshirilmagan.
Xato 3: Tokenni logga yozish
Log serverga ko‘p odam kira oladi. Token logda bo‘lsa — account hijack bo‘lishi mumkin.
Xato 4: Secrets .env yoki application.yml bilan Git’ga tushib ketishi
Bu real production incidentga olib keladi.
Xato 5: CORS * va credentials birga ishlatish
Bu xavfli sozlama.
Xato 6: Actuator endpointlarni ochiq qoldirish
/actuator/env, /actuator/heapdump, /actuator/threaddump kabi endpointlar juda sensitive.
Xato 7: Parolni encryption bilan saqlash
Parol encryption qilinmaydi. Parol hash qilinadi.
29. Senior interview savollari
Authentication / Authorization
Authentication va authorization farqi nima?
Role va permission farqi nima?
Object-level authorization nima?
Session va JWT farqi nima?
OAuth2 / OIDC
OAuth2 nima?
OIDC OAuth2’dan nimasi bilan farq qiladi?
Access token va ID token farqi nima?
Authorization server va resource server nima?
JWT
JWT ichida nimalar bor?
JWT encryptedmi?
HS256 va RS256 farqi?
exp,iss,audnima?Token revoke qilish muammosi nimada?
Spring Security
SecurityFilterChain nima?
hasRolevahasAuthorityfarqi?CSRF qachon kerak?
CORS security emasmi yoki browser policy’mi?
Resource Server qanday ishlaydi?
OWASP
SQL injectiondan qanday himoyalanasiz?
Broken access control misoli?
Secretlarni qayerda saqlaysiz?
Dependency vulnerability qanday tekshiriladi?
30. Amaliy topshiriqlar
Topshiriq 1: JWT Resource Server
Spring Boot app yarating:
GET /public
GET /user
GET /adminTalab:
/public → ochiq
/user → authenticated
/admin → ROLE_ADMINJWT bilan tekshiring.
Topshiriq 2: Object-level authorization
Endpoint:
GET /orders/{id}Shart:
User faqat o‘z orderini ko‘ra olsin.
Admin hammasini ko‘ra olsin.Topshiriq 3: Password hashing
Register/login yozing:
POST /auth/register
POST /auth/loginTalab:
Password BCrypt bilan hash qilinsin.
Plain password DBga tushmasin.Topshiriq 4: Secrets
application.ymldagi DB parolni environment variable’ga ko‘chiring:
spring:
datasource:
password: ${DB_PASSWORD}31. Qisqa xulosa
Security Java developer uchun majburiy mavzu.
Asosiy fikrlar:
Authentication — user kim?
Authorization — user nima qila oladi?
OAuth2 — ruxsat berish frameworki
OIDC — login/identity layer
JWT — token formati
JWT payload maxfiy emas
Password hash qilinadi, encrypt qilinmaydi
CSRF cookie auth’da muhim
CORS security devor emas, browser policy
Object-level authorization shart
Secrets code ichida bo‘lmasligi kerak
OWASP Top 10 real kodda tekshirilishi kerakEng muhim qoida:
Security keyin qo‘shiladigan bezak emas. U arxitektura, kod, config, deployment va monitoringning bir qismi.