किसी उपयोगकर्ता को API में लॉग इन करने की अनुमति दें
आपको अनुरोध के साथ एक मान्य प्रपत्र प्रमाणीकरण कुकी भेजने की आवश्यकता है। इस कुकी को आमतौर पर सर्वर द्वारा भेजा जाता है जब विधि ( MSDN देखें LogOn
) को कॉल करके प्रमाणित ( कार्रवाई) किया जाता है ।[FormsAuthentication.SetAuthCookie
इसलिए क्लाइंट को 2 चरण करने होंगे:
LogOn
उपयोगकर्ता नाम और पासवर्ड भेजकर एक कार्रवाई के लिए HTTP अनुरोध भेजें । इस क्रिया में यह FormsAuthentication.SetAuthCookie
विधि विधि को बुलाएगा (यदि क्रेडेंशियल मान्य हैं) तो बदले में प्रतिक्रिया में प्रपत्र प्रमाणीकरण कुकी सेट करेगा।
[Authorize]
पहले अनुरोध में पुनर्प्राप्त किए गए प्रपत्र प्रमाणीकरण कुकी के साथ भेजकर एक संरक्षित कार्रवाई के लिए एक HTTP अनुरोध भेजें ।
एक उदाहरण लेते हैं। मान लीजिए कि आपके वेब एप्लिकेशन में 2 एपीआई नियंत्रक परिभाषित हैं:
प्रमाणीकरण से निपटने के लिए पहला जिम्मेदार:
public class AccountController : ApiController
{
public bool Post(LogOnModel model)
{
if (model.Username == "john" && model.Password == "secret")
{
FormsAuthentication.SetAuthCookie(model.Username, false);
return true;
}
return false;
}
}
और दूसरा संरक्षित कार्य जिसमें केवल अधिकृत उपयोगकर्ता देख सकते हैं:
[Authorize]
public class UsersController : ApiController
{
public string Get()
{
return "This is a top secret material that only authorized users can see";
}
}
अब हम इस API का उपभोग करने वाले क्लाइंट एप्लिकेशन को लिख सकते हैं। यहां एक तुच्छ कंसोल एप्लिकेशन उदाहरण दिया गया है (सुनिश्चित करें कि आपने Microsoft.AspNet.WebApi.Client
और Microsoft.Net.Http
NuGet पैकेज स्थापित किए हैं):
using System;
using System.Net.Http;
using System.Threading;
class Program
{
static void Main()
{
using (var httpClient = new HttpClient())
{
var response = httpClient.PostAsJsonAsync(
"http://localhost:26845/api/account",
new { username = "john", password = "secret" },
CancellationToken.None
).Result;
response.EnsureSuccessStatusCode();
bool success = response.Content.ReadAsAsync<bool>().Result;
if (success)
{
var secret = httpClient.GetStringAsync("http://localhost:26845/api/users");
Console.WriteLine(secret.Result);
}
else
{
Console.WriteLine("Sorry you provided wrong credentials");
}
}
}
}
और यहाँ 2 HTTP अनुरोध तार पर कैसे दिखते हैं:
प्रमाणीकरण अनुरोध:
POST /api/account HTTP/1.1
Content-Type: application/json; charset=utf-8
Host: localhost:26845
Content-Length: 39
Connection: Keep-Alive
{"username":"john","password":"secret"}
प्रमाणीकरण प्रतिक्रिया:
HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Wed, 13 Jun 2012 13:24:41 GMT
X-AspNet-Version: 4.0.30319
Set-Cookie: .ASPXAUTH=REMOVED FOR BREVITY; path=/; HttpOnly
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
Content-Type: application/json; charset=utf-8
Content-Length: 4
Connection: Close
true
संरक्षित डेटा के लिए अनुरोध:
GET /api/users HTTP/1.1
Host: localhost:26845
Cookie: .ASPXAUTH=REMOVED FOR BREVITY
संरक्षित डेटा के लिए प्रतिक्रिया:
HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Wed, 13 Jun 2012 13:24:41 GMT
X-AspNet-Version: 4.0.30319
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
Content-Type: application/json; charset=utf-8
Content-Length: 66
Connection: Close
"This is a top secret material that only authorized users can see"