# JWT से Authentication और Authorization — .NET Core: वेब API बनाएँ, टेस्ट करें और शिप करें

Source: https://www.geekswithgeeks.com/hi/dotnet-core/sec-jwt-auth

> JWT bearer tokens से endpoints सुरक्षित करें और authentication व authorization का फ़र्क़ समझें।

## आप कौन हैं, आप क्या कर सकते हैं

**Authentication** बताता है "यह कौन है?" और **authorization** बताता है "क्या यह ऐसा कर सकता है?" JWT एक signed token है जिसे client `Authorization: Bearer ...` header में भेजता है; API उसका signature, issuer, audience और expiry जाँचती है।

## JWT bearer जोड़ें

`Microsoft.AspNetCore.Authentication.JwtBearer` package जोड़ें। Authority और audience आम तौर पर आपके identity provider, जैसे Entra ID, Auth0 या Keycloak, से आते हैं।

```csharp
builder.Services.AddAuthentication("Bearer").AddJwtBearer(o =>
{
    o.Authority = builder.Configuration["Auth:Authority"];
    o.Audience  = builder.Configuration["Auth:Audience"];
});
builder.Services.AddAuthorization();

var app = builder.Build();
app.UseAuthentication();
app.UseAuthorization();

app.MapGet("/me", (ClaimsPrincipal user) => user.Identity?.Name)
   .RequireAuthorization();
```

## Tokens को अल्पकालिक रखें

JWT में secrets कभी न रखें: वह सिर्फ़ signed होता है, encrypted नहीं, इसलिए payload कोई भी पढ़ सकता है। छोटी expiry, सिर्फ़ HTTPS और refresh flow रखें। अपना login system लिखने की जगह identity provider चुनें।

**Quiz:** कौन-सी call endpoint के लिए signed-in user ज़रूरी बनाती है?

- [ ] .AllowAnonymous()
- [ ] .WithName()
- [x] .RequireAuthorization()
- [ ] .Produces()

*Answer:* .RequireAuthorization(). `RequireAuthorization()` endpoint को ऐसी requests अस्वीकार करवाता है जो authenticated और authorized नहीं हैं।
