2008-10-16 14 views
8

के माध्यम से एएसपी क्लासिक में HTTP प्रमाणीकरण (बेसिक या डाइजेस्ट) मैं एएसपी क्लासिक में एक वेबसाइट विकसित करना चाहता हूं जो स्क्रिप्ट के नियंत्रण में मौजूद डेटाबेस या पासवर्ड सूची के विरुद्ध HTTP प्रमाणीकरण का उपयोग करता है। आदर्श रूप से, समाधान में कोई घटक या आईआईएस सेटिंग्स शामिल नहीं होनी चाहिए क्योंकि स्क्रिप्ट को होस्ट किए गए वातावरण में चलाने योग्य होना चाहिए।आईआईएस

किसी भी सुराग/कोड की गहराई से सराहना की गई।

उत्तर

9

शुद्ध क्लासिक एएसपी वीबीस्क्रिप्ट में HTTP मूल प्रमाणीकरण करना संभव है।

आपको बेस 64 को डीकोड करने के लिए कुछ चाहिए। Here is a pure VBScript implementation। आपको यह सुनिश्चित करने की भी आवश्यकता होगी कि आपके आईआईएस कॉन्फ़िगरेशन में आप "मूल प्रमाणीकरण" और "एकीकृत विंडोज प्रमाणीकरण" बंद कर दें क्योंकि इससे HTTP_AUTHORIZATION शीर्षलेख में आप जो भी प्राप्त करेंगे, उससे हस्तक्षेप करेंगे।

यहां एक नमूना कार्यान्वयन है जो उपयोगकर्ता नाम और पासवर्ड को वापस लेता है।

<%@LANGUAGE="VBSCRIPT"%> 

<!--#include file="decbase64.asp" --> 

<% 
Sub Unauth() 
    Call Response.AddHeader("WWW-Authenticate", "Basic realm=""SomethingGoesHere""") 
    Response.Status = "401 Unauthorized" 
    Call Response.End() 
End Sub 

Dim strAuth 
strAuth = Request.ServerVariables("HTTP_AUTHORIZATION") 

If IsNull(strAuth) Or IsEmpty(strAuth) Or strAuth = "" Then 
    Call Unauth 
Else 
    %> 
    <html> 
    <body> 
    <% 
     Dim aParts, aCredentials, strType, strBase64, strPlain, strUser, strPassword 
     aParts = Split(strAuth, " ") 
     If aParts(0) <> "Basic" Then 
      Call Unauth 
     End If 
     strPlain = Base64Decode(aParts(1)) 
     aCredentials = Split(strPlain, ":") 
    %> 
    <%= Server.HTMLEncode(aCredentials(0) & " - " & aCredentials(1)) %> 
    </body> 
    </html> 
    <% 
End If 
%> 

उपयोगकर्ता नाम और पासवर्ड को सार्थक कुछ करने के लिए पाठक के लिए अभ्यास के रूप में छोड़ दिया जाता है।

0

हाय क्या आप किसी डेटाबेस से उपयोगकर्ताओं की सूची प्राप्त करने या HTTP सर्वर पर नेटवर्क आधारित अनुमतियों का उपयोग करने की कोशिश कर रहे हैं?

आप एक डेटाबेस उपयोग ODBC और DSN

Dim DatabaseObject1 
Set DatabaseObject1 = Server.CreateObject("ADODB.Connection") 
DatabaseObject1.Open("DSN=DSNname;") 

आप (सर्वर से) एक पासवर्ड संवाद बॉक्स इच्छुक रहे हैं, तो उपयोग कर रहे हैं, तो आप इस के लिए एक अच्छा गाइड के लिए आईआईएस सेटिंग को बदल करने की आवश्यकता होगी ..

http://www.authenticationtutorial.com/tutorial/

3

परिभाषा के अनुसार, HTTP प्रमाणीकरण कुछ है कि वेबसर्वर से अनुरोध किया है, मुझे शक है आप एक समाधान है कि कोई आईआईएस सेटिंग नहीं होती तो संभव लागू किया जा रहा हैं।

वेब ब्राउज़र आपकी वेबसाइट से कनेक्ट होगा, और जब तक कि आपका सर्वर एक HTTP प्रतिक्रिया कोड HTTP/1.1 401 अनधिकृत के साथ प्रतिक्रिया न दे, ब्राउज़र क्रेडेंशियल्स से गुज़र नहीं पाएगा।

आप की कोशिश कर सकते हैं और 401 की एक प्रतिक्रिया कोड मजबूर और हैडर

WWW-Authenticate: Basic realm="SomethingGoesHere" 

बाद ब्राउज़र को उपयोगकर्ता नाम और पासवर्ड के लिए उपयोगकर्ता का संकेत देगा सेट है, लेकिन ब्राउज़र (बेस 64 के लिए स्पष्ट-पाठ पर भेज दिया जाएगा इनकोडिंग), इस तरह:

Authorization: Basic YnJpYW5iOmJvYmJ5Ym95 

कौन सा Base64 से करने के लिए अनुवाद किया है:

brianb:bobbyboy 

मुझे नहीं पता कि आपके पास अपने एएसपी पेज से प्राधिकरण शीर्षलेख तक पहुंच होगी, या यदि वेब सर्वर फिक्र करने जा रहा है क्योंकि कोई इसकी अपेक्षा नहीं करते समय इसे प्रमाण-पत्र पास करने का प्रयास कर रहा है, लेकिन यह लायक हो सकता है एक प्रयास ...

+0

उपयोगकर्ता और पासवर्ड बेस 64 एन्कोडिंग से पहले धोया जाना चाहिए, जब तक कि आप चाहते हैं कि कोई व्यक्ति बेस 64 पर यातायात को आपके क्रेडेंशियल्स को डीकोड न करे। – booyaa