2013-02-19 12 views
5

मैं एएसपी.NET वेब एपीआई का उपयोग कर एक सत्यापित पासवर्ड सेवा लिख ​​रहा हूं।विश्वसनीय सत्यापित करें सेवा सेवा

सेवा वर्तमान में साइन इन किए गए उपयोगकर्ता के लिए पासवर्ड स्वीकार करती है, इसे सत्यापित करती है, और एक एन्कोडेड मान देता है। यह सब एसएसएल पर होता है।

इस विधि को कॉल करने से राज्य में कोई बदलाव नहीं होता है।

प्रारंभ में ऐसा लगता है कि यह GET अनुरोध होना चाहिए हालांकि आगे निरीक्षण पर मैं वेब सर्वर लॉगिंग सादा पाठ पासवर्ड के बारे में चिंतित हूं।

हम इसे POST के रूप में कार्यान्वित कर सकते हैं लेकिन यह कार्रवाई को दिए गए गलत क्रिया की तरह लगता है।

क्या यह प्रक्रिया पर व्यावहारिकता का मामला है या क्या हम व्यावहारिक और अस्थिर मामलों दोनों को पूरा करने के लिए और अधिक कर सकते हैं?

उत्तर

1

आपको Basic Authentication का उपयोग करना चाहिए जहां आप उपयोगकर्ता नाम/पासवर्ड हेडर के रूप में पास करते हैं। यह मानक पहले ही परिभाषित मानक के रूप में बेहतर फिट बैठता है।

बेस 64 एन्कोडिंग करने के लिए पहले से ही javascript कोड है - यदि आपको ब्राउज़र पर ऐसा करने की आवश्यकता है।


में प्रमाणित करने में यह कर रहे हैं और इनकोडिंग मूल्य पहुँच टोकन (कुकी), यह OAuth 2.0 उपयोग करने के लिए बेहतर है है।

+0

धन्यवाद अलीस्टाड। बेसिक ऑथ विवरणों को देखते हुए यह काफी आवश्यक नहीं है (विशेष रूप से नुकसान सूची)। हम वास्तव में उपयोगकर्ता को साइन इन नहीं कर रहे हैं, हम बस यह जांच रहे हैं कि वर्तमान में साइन इन किया गया उपयोगकर्ता अपना पासवर्ड जानता है (कुछ सेटिंग्स बदलते समय एक पासवर्ड बाधा)। –

0

यदि एपीआई कॉल एक प्रतिक्रिया भेजता है जो संसाधन प्रति से नहीं है (डेटा स्टोर से लौटाए गए संसाधन को शामिल नहीं करता है), तो आपको क्रियाओं का उपयोग संज्ञाओं का नहीं करना चाहिए।

आप एक UserPasswordsController नियंत्रक है कि इस तरह एक कार्रवाई विधि को उजागर करता है हो सकता है:

[HttpPost()] 
public HttpResponseMessage Validate() 
{ 
    if (!this.Request.Content.IsFormUrlEncodedContent()) 
    { 
     return this.Request.CreateErrorResponse(
      HttpStatusCode.BadRequest, 
      "Body of request must be form URL encoded." 
     ); 
    } 

    var parameters = this.Request.Content.ReadAsFormDataAsync().Result; 

    var userName = parameters["userName"]; 
    var password = parameters["password"]; 

    // TODO: Validate user name and password 
    var isValid = true; 

    if(!isValid) 
    { 
     return this.Request.CreateErrorResponse(
      HttpStatusCode.Forbidden, 
      String.Format(null, "The password provided for {0} is not valid.", userName) 
     ); 
    } 

    return this.Request.CreateResponse(HttpStatusCode.OK); 
} 

और इस तरह एक पंजीकृत मार्ग है:

routes.MapHttpRoute(
    name:   "UserPasswords", 
    routeTemplate: "api/v1/validate", 
    defaults:  new { controller = "userpasswords" } 
); 

आप रूपों मान्यता समाप्ति बिंदु को डेटा पोस्ट होता है कि उस उपयोगकर्ता नाम और पासवर्ड को शामिल किया गया है जिसे आप सत्यापित करना चाहते हैं। निषिद्ध स्थिति की स्थिति इंगित करती है कि पासवर्ड अमान्य है, जबकि पासवर्ड वैध होने पर ओके की स्थिति वापस कर दी जाती है।

यदि आप आरईएसटी इंटरफेस पर काम करने के लिए नए हैं और व्यावहारिक दृष्टिकोण लेना चाहते हैं, तो मैं अत्यधिक अनुशंसा करता हूं कि आप Web API Design - Crafting Interfaces that Developers Love पर एक नज़र डालें।

संबंधित मुद्दे