C# (.NET) में OAuth 2.0 और OpenID Connect के लिए IdentityModel लाइब्रेरी
.NET प्लेटफॉर्म पर आधुनिक वेब एप्लिकेशन, मोबाइल क्लाइंट या सर्वर API विकसित करते समय, बाहरी प्रमाणीकरण प्रदाताओं (Google, GitHub, Microsoft आदि) या अपने स्वयं के प्राधिकरण सर्वर के साथ एकीकरण की आवश्यकता लगभग हमेशा होती है। IdentityModel C# के लिए एक हल्की लेकिन शक्तिशाली लाइब्रेरी है, जो OAuth 2.0 और OpenID Connect प्रोटोकॉल के साथ काम करने के लिए एक सुविधाजनक OAuth क्लाइंट प्रदान करती है। यह .NET इकोसिस्टम में प्राधिकरण प्रवाह को लागू करने के लिए डी-फैक्टो मानक है।
इस लेख में, हम विस्तार से जानेंगे कि OAuth क्लाइंट बनाने, एक्सेस टोकन प्राप्त करने और उन्हें रिफ्रेश करने के लिए IdentityModel का उपयोग कैसे करें। कोड उदाहरण C# (.NET 6+) में होंगे।
इंस्टॉलेशन और सेटअप
आरंभ करने के लिए, NuGet पैकेज मैनेजर के माध्यम से पैकेज इंस्टॉल करें:
dotnet add package IdentityModel
या पैकेज मैनेजर कंसोल के माध्यम से:
Install-Package IdentityModel
इंस्टॉलेशन के बाद, आपको HttpClient एक्सटेंशन, DiscoveryClient, TokenClient और अन्य सहायक उपयोगिताओं तक पहुंच मिल जाती है।
मूल परिदृश्य: क्लाइंट क्रेडेंशियल्स के माध्यम से टोकन प्राप्त करना
यह प्रवाह सर्वर-टू-सर्वर प्रमाणीकरण के लिए उपयोग किया जाता है, जब क्लाइंट (आपका एप्लिकेशन) उपयोगकर्ता की ओर से नहीं, बल्कि अपनी ओर से टोकन का अनुरोध करता है।
OAuth क्लाइंट सेटअप का उदाहरण:
using IdentityModel.Client;
using System.Net.Http;
using System.Threading.Tasks;
public async Task<string> GetAccessTokenAsync()
{
var client = new HttpClient();
// 1. प्राधिकरण सर्वर से डिस्कवरी दस्तावेज़ प्राप्त करें
var disco = await client.GetDiscoveryDocumentAsync("https://your-auth-server.com");
if (disco.IsError)
{
throw new Exception($"डिस्कवरी प्राप्त करने में त्रुटि: {disco.Error}");
}
// 2. client_id और client_secret का उपयोग करके टोकन का अनुरोध करें
var tokenResponse = await client.RequestClientCredentialsTokenAsync(
new ClientCredentialsTokenRequest
{
Address = disco.TokenEndpoint,
ClientId = "your-client-id",
ClientSecret = "your-client-secret",
Scope = "api1 api2" // अनुरोधित अनुमतियाँ
});
if (tokenResponse.IsError)
{
throw new Exception($"टोकन प्राप्त करने में त्रुटि: {tokenResponse.Error}");
}
return tokenResponse.AccessToken;
}
इस उदाहरण में, हम IdentityModel.Client नेमस्पेस से एक्सटेंशन विधियों का उपयोग कर रहे हैं। लाइब्रेरी स्वचालित रूप से JSON सीरियलाइज़ेशन, हेडर और प्रतिक्रियाओं को पार्स करने का काम करती है।
प्राधिकरण कोड प्रवाह (उपयोगकर्ता की भागीदारी के साथ)
उपयोगकर्ता इंटरफ़ेस वाले एप्लिकेशन (ASP.NET Core MVC, Blazor, डेस्कटॉप) के लिए, प्राधिकरण कोड का अधिक उपयोग किया जाता है। IdentityModel Microsoft.AspNetCore.Authentication.OpenIdConnect के साथ एकीकृत होता है, लेकिन मैन्युअल कार्यान्वयन के लिए निम्न-स्तरीय उपकरण भी प्रदान करता है।
कोड के साथ रीडायरेक्ट के बाद टोकन प्राप्त करने का उदाहरण:
public async Task<TokenResponse> ExchangeCodeForTokenAsync(string authorizationCode, string redirectUri)
{
var client = new HttpClient();
var disco = await client.GetDiscoveryDocumentAsync("https://your-auth-server.com");
var tokenResponse = await client.RequestAuthorizationCodeTokenAsync(
new AuthorizationCodeTokenRequest
{
Address = disco.TokenEndpoint,
ClientId = "your-client-id",
ClientSecret = "your-client-secret",
Code = authorizationCode,
RedirectUri = redirectUri
});
return tokenResponse;
}
टोकन रिफ्रेश करना (Refresh Token)
एक्सेस टोकन आमतौर पर लंबे समय तक नहीं चलते (जैसे, 1 घंटा)। सत्र को बढ़ाने के लिए रिफ्रेश टोकन का उपयोग किया जाता है। IdentityModel इस प्रक्रिया को बहुत सरल बनाता है।
पुस्तकालय में भी
C++ के लिए Swagger/OpenAPI जनरेशन: सर्वश्रेष्ठ टूल्स और लाइब्रेरी
जावास्क्रिप्ट (Node.js) पर PDF रिपोर्ट जनरेशन: Puppeteer, PDFKit, jsPDF
C++ में क्रिप्टोग्राफी: OpenSSL और Crypto++ के साथ एन्क्रिप्शन और हैश
iOS और macOS के लिए Swift में PDF रिपोर्ट जनरेशन - PDFKit और Core Graphics
C# (.NET) में ZIP/आर्काइव के साथ कार्य: पूर्ण गाइड