का उपयोग कर सेवा प्रमाणीकरण के लिए वेब एपीआई में एपी कुंजी का उपयोग कैसे करें मैं एमवीसी 4 वेब एपीआई का उपयोग कर रहा हूं और मैं चाहता हूं कि उपयोगकर्ता मेरी सेवा का उपयोग करने से पहले प्रमाणित हों।फॉर्म प्रमाणीकरण
मैंने एक प्राधिकरण संदेश हैंडलर लागू किया है, जो ठीक काम करता है।
public class AuthorizationHandler : DelegatingHandler
{
private readonly AuthenticationService _authenticationService = new AuthenticationService();
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
IEnumerable<string> apiKeyHeaderValues = null;
if (request.Headers.TryGetValues("X-ApiKey", out apiKeyHeaderValues))
{
var apiKeyHeaderValue = apiKeyHeaderValues.First();
// ... your authentication logic here ...
var user = _authenticationService.GetUserByKey(new Guid(apiKeyHeaderValue));
if (user != null)
{
var userId = user.Id;
var userIdClaim = new Claim(ClaimTypes.SerialNumber, userId.ToString());
var identity = new ClaimsIdentity(new[] { userIdClaim }, "ApiKey");
var principal = new ClaimsPrincipal(identity);
Thread.CurrentPrincipal = principal;
}
}
return base.SendAsync(request, cancellationToken);
}
}
समस्या यह है कि मैं फॉर्म प्रमाणीकरण का उपयोग करता हूं।
[HttpPost]
public ActionResult Login(UserModel model)
{
if (ModelState.IsValid)
{
var user = _authenticationService.Login(model);
if (user != null)
{
// Add the api key to the HttpResponse???
}
return View(model);
}
return View(model);
}
जब मैं अपने API कॉल:
[Authorize]
public class TestController : ApiController
{
public string GetLists()
{
return "Weee";
}
}
हैंडलर एक्स ApiKey हैडर नहीं मिल रहा।
क्या HTTP प्रतिक्रिया शीर्षलेख में उपयोगकर्ता की एपीआई कुंजी जोड़ने और वहां कुंजी रखने के लिए कोई तरीका है, जब तक कि उपयोगकर्ता लॉग इन हो? क्या इस कार्यक्षमता को लागू करने का कोई और तरीका है?
धन्यवाद! आप सही हैं मेरा मतलब प्रपत्र प्रमाणीकरण था। मैंने अपना प्रश्न संपादित किया। मैं सदस्यता प्रदाता का उपयोग नहीं कर रहा हूं, इसके बजाय मैंने कस्टम प्रमाणीकरण तर्क बनाया है। मैं HttpRequestMessage का उपयोग नहीं कर सकता, क्योंकि मैं एमवीसी नियंत्रक का उपयोग करके अपना कार्यप्रणाली कर रहा हूं और एक क्रिया परिणाम लौटा रहा हूं (या मुझे इसका उपयोग करने के तरीके के बारे में पता नहीं है)। –