# Gateway पर Authentication — API Gateway और Service Mesh

Source: https://www.geekswithgeeks.com/hi/api-gateway-service-mesh/s-auth-edge

> API keys या tokens को edge पर एक बार validate करें और पहचान services को दें।

## जल्दी, सस्ते में अस्वीकार करें

Gateway पर authentication का मतलब है कि अप्रमाणित अनुरोध आपकी services तक कभी नहीं पहुँचते, जिससे उनकी क्षमता बचती है और हमले की सतह घटती है। Gateway **API keys** जाँच सकता है (lookup), **JWTs** validate कर सकता है (identity provider की public keys से signature, issuer, audience, expiry), या **बाहरी authorisation service** बुला सकता है। ग़ायब या अमान्य credentials पर **`401`** और पहचान ज्ञात होकर भी अनुमति न होने पर **`403`** लौटाएँ। सत्यापित पहचान आगे भेजें (header या दोबारा हस्ताक्षरित token) और services को फिर भी अपनी **object-level authorisation** लागू करने दें, क्योंकि gateway नहीं जान सकता कि कौन-सा order किस user का है। Defence in depth का मतलब है कि compromised gateway का अर्थ compromised system न हो।

## एक बार, दरवाज़े पर जाँचें

Gateway callers को authenticate करता है, दुरुपयोग सीमित करता है और TLS terminate करता है ताकि services सरल रहें।

![तीन नियंत्रण: पहचान, सीमा, encrypt।](assets/figures/api-gateway-service-mesh/section-3-map.svg) — चित्र 3.1 — पहचान, सीमा और encrypt।

## API-key जाँच (config)

`map` `X-API-Key` header को हाँ/ना flag में बदलता है और वैध न होने पर location `401` लौटाती है। असली gateways keys को store से लोड करते हैं, hard-code कभी नहीं।

```nginx
map $http_x_api_key $api_ok { default 0; "demo-key-123" 1; }

location /orders/ {
  if ($api_ok = 0) { return 401 '{"error":"missing or invalid API key"}\n'; }
  proxy_pass http://orders_weighted/;
}
```

## Key नहीं, ग़लत key, सही key, चलाकर

मैंने यह Docker में असली nginx 1.27 gateway पर चलाया, upstreams के रूप में छोटी Node.js services के साथ (पूरा setup केस स्टडी में)। Key के बिना और ग़लत key के साथ gateway ख़ुद `401` देता है (पहली पंक्ति JSON body दिखाती है); सही key के साथ अनुरोध proxy होकर `200` लौटाता है।

```bash
GET /orders/x
GET /orders/x  X-API-Key: wrong
GET /orders/x  X-API-Key: demo-key-123
```

Output:

```
401 {"error":"missing or invalid API key"}
401 200
```

## Users के लिए JWT validation, apps के लिए keys

API keys application की पहचान बताती हैं; वे नहीं बतातीं कि कौन-सा व्यक्ति बुला रहा है। User-उन्मुख APIs के लिए edge पर validate होने वाले OAuth 2.0 / OIDC tokens चुनें।

**Quiz:** बिना credentials वाले अनुरोध के लिए gateway को कौन-सा status लौटाना चाहिए?

- [ ] 204 No Content
- [ ] 403 Forbidden
- [x] 401 Unauthorized
- [ ] 302 Found

*Answer:* 401 Unauthorized. 401 का मतलब caller authenticated नहीं; 403 का मतलब authenticated पर अनुमति नहीं।
