কীভাবে ব্রাউজারকে বুনিয়াদী লেখক পপআপ এবং 401 ত্রুটি Jquery ব্যবহার করে পরিচালনা করতে বাধা দিতে হবে?


107

আমার বেসিক লেখার সাহায্যে অনুমোদনের অনুরোধ পাঠাতে হবে। আমি jquery ব্যবহার করে এটি সফলভাবে প্রয়োগ করেছি। তবে আমি যখন 401 ত্রুটি পেয়েছি মৌলিক লেখক ব্রাউজারের পপআপ খোলা হয় এবং জ্যাকোরি এজাক্স ত্রুটি কলব্যাক কল করা হয় না।


উত্তর:


46

আমি খুব সম্প্রতি এই সমস্যাটির মুখোমুখি হয়েছি। যেহেতু আপনি কোনও 401( বেসিক বা ডাইজেস্ট প্রমাণীকরণ) ক্ষেত্রে পপআপ দেখানোর ব্রাউজারের ডিফল্ট আচরণটি পরিবর্তন করতে পারবেন না , তাই এটি ঠিক করার দুটি উপায় রয়েছে:

  • না ফেরত সার্ভারের প্রতিক্রিয়া পরিবর্তন করুন 401200পরিবর্তে একটি কোড ফেরত দিন এবং আপনার jQuery ক্লায়েন্টে এটি পরিচালনা করুন।
  • আপনি অনুমোদনের জন্য যে পদ্ধতিটি ব্যবহার করছেন তা আপনার শিরোনামের একটি কাস্টম মানতে পরিবর্তন করুন। ব্রাউজারগুলি বেসিক এবং ডাইজেস্টের পপআপ প্রদর্শন করবে । আপনাকে এটি ক্লায়েন্ট এবং সার্ভার উভয় ক্ষেত্রেই পরিবর্তন করতে হবে।

    headers : {
      "Authorization" : "BasicCustom"
    }

এছাড়াও কটাক্ষপাত করা অনুগ্রহ করে এই বুনিয়াদি প্রমাণীকরণ সঙ্গে jQuery ব্যবহার একটি উদাহরণ জন্য।


10
ডাব্লুডাব্লুডাব্লু-প্রমাণীকরণ: এক্সবাসিক রিয়েলম = com.example ক্লাসিক 401 স্থিতি কোডের সাথে একত্রে এটি করতে পারে। এই ব্লগ পোস্টটি আমাকে ইঙ্গিতটি দেখিয়েছে (আমি ব্লগের মালিক নই) লাউডভিচার.ব্লগস্পট.সি.এ .2010
11

2
@ পিএম, ব্লগের উত্তরটি একটি নিখুঁত সমাধান। মনে রাখবেন যে <security:http-basic/>আপনাকে ব্যবহার করার সময় সংজ্ঞা দেওয়ার দরকার নেই basicAuthenticationFilterতবে এটি হিসাবে সংজ্ঞা দেওয়া উচিত <security:http-basic entry-point-ref="myBasicAuthenticationEntryPoint"/>
ব্রেট রায়ান

আপনি কীভাবে আমাকে ক্লায়েন্টকে ফেরত পাঠানোর আগে প্রতিক্রিয়াটিকে ওভাররাইড করবেন তা বলতে পারেন, আমি জ্যাকার্সকে বেসিক লেখার সাথে ব্যবহার করছি। প্রতিক্রিয়াটি সংশোধন করার জন্য আমার কোন শ্রেণির ওভাররাইড করা উচিত?
মোহাম্মদ সোমেন

কোনও কারণে ফিরে আসার সময় আমি 401WWW-Authenticate:Bearer WWW-Authenticate:NTLM WWW-Authenticate:Negotiate
পপআপটি পাচ্ছি

34

একটি জেনেরিক 400 স্ট্যাটাস কোডটি ফিরিয়ে দিন এবং তারপরে সেই ক্লায়েন্টের পাশ দিয়ে প্রক্রিয়া করুন।

অথবা আপনি 401 রাখতে পারেন এবং ডাব্লুডাব্লুডাব্লু-প্রমাণীকরণ শিরোনামটি ফিরিয়ে দিতে পারবেন না, যা সত্যিকারের ব্রাউজারটি প্রমাণীকরণ পপআপ দিয়ে সাড়া দিচ্ছে। যদি ডাব্লুডাব্লুডাব্লু-প্রমাণী শিরোনাম অনুপস্থিত থাকে, তবে ব্রাউজারটি শংসাপত্রগুলির জন্য অনুরোধ জানাবে না।


6
@ মর্টেনহ্যারাডসন ওয়েল 401 প্রতিক্রিয়াটি এই উপলক্ষে প্রদত্ত যথাযথ প্রতিক্রিয়া, সমস্যাটি হ'ল জাভাস্ক্রিপ্ট অ্যাপ্লিকেশনটিকে এটি পরিচালনা করার পরিবর্তে ব্রাউজারটি স্বয়ংক্রিয়ভাবে এটিকে স্থানীয়ভাবে পরিচালনা করছে। স্ট্যান্ডার্ডটি প্রস্তাবিত যথাযথ প্রতিক্রিয়া না ফিরিয়ে আপনি স্ট্যান্ডার্ডটির সাথে লেগে থাকতে পারেন, বা আপনি স্ট্যান্ডার্ড-প্রস্তাবিত প্রতিক্রিয়া কোডটি ফিরিয়ে স্ট্যান্ডার্ডের সাথে লেগে না থাকতে বেছে নিতে পারেন। আপনার বাছাই করুন :)
ইব্রাহিম

আমার এক্সপ্রেস অ্যাপ্লিকেশনটিতে, আমি এটি একটি লাইনের সাথে ঠিক করেছি: res.removeHeader('www-authenticate'); // prevents browser from popping up a basic auth window.
gstroup

1
@ ইব্রাহিম, এটি নিজের চেয়ে ভাল করে বলতে পারত না। স্ট্যান্ডার্ডগুলি এমন লোকদের দ্বারা তৈরি করা হয় যারা বসে এবং কথা বলে, অগত্যা যাঁরা বসে এবং কোড করেন।
ব্যবহারকারী 2867288

15

অনুরোধ url এর মতো দেখতে আপনি বুনিয়াদি লেখক পপআপকে দমন করতে পারেন:

https://username:password@example.com/admin/...

যদি আপনি 401 ত্রুটি (ভুল ব্যবহারকারী নাম বা পাসওয়ার্ড) পান তবে এটি jquery ত্রুটি কলব্যাক দিয়ে সঠিকভাবে পরিচালনা করা হবে। এটি কিছু সুরক্ষা সমস্যা সৃষ্টি করতে পারে (https এর পরিবর্তে HTTP প্রোটোকলের ক্ষেত্রে), তবে এটি কার্যকর।

ইউপিডি: ক্রোম 59-এ এই সমাধান সমর্থনটি সরানো হবে


ক্যাচাল !!!! সমস্যাটি 192.168.1.1 এ চেষ্টা করার সাথে সাথে আমার সমস্যার সমাধান হয়েছে এবং রাউটার আথের কাছে জিজ্ঞাসা করে চলেছে।
নাদাভ লেবোভিচ

আপনি যদি কোনও ব্রাউজারে বিকাশকারী সরঞ্জামগুলির অধীনে "নেটওয়ার্ক" ট্যাবে যান, আপনি সরল পাঠ্যে ব্যবহারকারীর নাম এবং পাসওয়ার্ড পড়তে সক্ষম হবেন। যদিও এটি কাজ করে।
ব্রুনো ফিঙ্গার

19
কখনও দয়া করে এটি করবেন না, আপনার ওয়েবসভারে অনুরোধগুলি লগগুলি এখন আমার কাছে অনেক বেশি মূল্যবান .. ফ্রি ব্যবহারকারীর নাম এবং পাসওয়ার্ড কম্বোর প্লাস প্রতিক্রিয়া কোড! ধন্যবাদ
রিমকো

তবে কেউ কীভাবে ব্যবহারকারীর নাম এবং পাসওয়ার্ডটি দেখা থেকে আটকাতে পারে
sdx11

3
এই প্রমাণীকরণ পদ্ধতিটি অবনতিহীন হয়ে উঠছে এবং Chrome এম্বেড করা শংসাপত্রগুলির জন্য অর্থাত্ M59 তেhttps://user:pass@host/ জুন ২০১ around এর আশেপাশে সমর্থন ছাড়বে more আরও তথ্যের জন্য এই ক্রোমস্ট্যাটাস ব্লগ পোস্টটি দেখুন।
গ্যারিওয়ু

13

অন্যরা যেমন উল্লেখ করেছে, ব্রাউজারের আচরণ পরিবর্তন করার একমাত্র উপায় হ'ল শিরোনামটি অন্তর্ভুক্ত না করে এটির প্রতিক্রিয়াটি 401 স্থিতি কোডটি না রয়েছে কিনা তা নিশ্চিত করা WWW-Authenticate: Basic। যেহেতু স্থিতি কোডটি পরিবর্তন করা খুব সিনমেটিক এবং অবাঞ্ছিত নয়, তাই একটি ভাল পদ্ধতির নাম অপসারণ করাWWW-Authenticate শিরোনামটি । আপনি যদি নিজের ওয়েব সার্ভার অ্যাপ্লিকেশনটি সংশোধন করতে বা না করতে চান তবে আপনি সর্বদা এটি অ্যাপাচি (যদি আপনি ইতিমধ্যে অ্যাপাচি ব্যবহার না করে থাকেন) এর মাধ্যমে পরিবেশন করতে বা প্রক্সি করতে পারেন।

ডাব্লুডাব্লুডাব্লু-প্রমাণীকরণ শিরোলেখ অপসারণ করার জন্য অ্যাপাচি-র প্রতিক্রিয়াটি পুনরায় লেখার জন্য এখানে একটি কনফিগারেশন রয়েছে IFF অনুরোধটিতে শিরোনাম রয়েছে X-Requested-With: XMLHttpRequest(যা মূলত জাভাস্ক্রিপ্ট ফ্রেমওয়ার্ক যেমন জিকুয়েরি / অ্যাংুলারজেএস ইত্যাদির দ্বারা সেট করা আছে ...) এবং প্রতিক্রিয়াটিতে রয়েছে হেডার WWW-Authenticate: Basic

অ্যাপাচি ২.৪-তে পরীক্ষা করা হয়েছে (এটি 2.2 এর সাথে কাজ করে কিনা তা নিশ্চিত নয়)। এটি mod_headersইনস্টল করা মডিউলটির উপর নির্ভর করে । (ডেবিয়ান / উবুন্টুতে sudo a2enmod headersএবং অ্যাপাচি পুনরায় চালু করুন)

    <Location />
            # Make sure that if it is an XHR request,
            # we don't send back basic authentication header.
            # This is to prevent the browser from displaying a basic auth login dialog.
            Header unset WWW-Authenticate "expr=req('X-Requested-With') == 'XMLHttpRequest' && resp('WWW-Authenticate') =~ /^Basic/"
    </Location>   

1
proxy_hide_header WWW-Authenticate;
এনগিনেক্সের

7

এক্স-রিকুয়েস্টড-সহ: আপনার অনুরোধ শিরোনামের সাথে এক্সএমএলএইচটিটিপিআরকেস্ট ব্যবহার করুন। সুতরাং প্রতিক্রিয়া শিরোনামে WWW- প্রমাণীকরণ: বেসিক থাকবে না।

beforeSend: function (xhr) {
                    xhr.setRequestHeader('Authorization', ("Basic "
                        .concat(btoa(key))));
                    xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
                },

1
এটি আমার জন্য কোনও প্রভাব ফেলেনি। আপনি XMLHttpRequest সেট করার সময় আপনি কী ধরণের সার্ভার ব্যবহার করছেন যে ডাব্লুডাব্লুডাব্লু-প্রমাণীকরণ প্রেরণ করা হয়নি?
রবার্ট আন্তনুচি

@ রবার্ট অ্যান্টুনুচি এটি অ্যাপাচি টমক্যাট
সেধু ২:

5

আপনি একটি আইআইএস সার্ভার ব্যবহার করেন, তাহলে আপনি সেটআপ আইআইএস URL টি rewriting (v2) পুনর্লিখন পারে WWW-Authenticationথেকে হেডার Noneঅনুরোধ করা URL উপর।

এখানে গাইড

আপনি যে মানটি পরিবর্তন করতে চান তা হ'ল response_www_authenticate

আপনার যদি আরও তথ্যের প্রয়োজন হয় তবে একটি মন্তব্য যুক্ত করুন এবং আমি ওয়েবকনফিগ ফাইলটি পোস্ট করব।


1
এটি দুর্দান্ত কাজ করেছে। আমি লক্ষ করতে চাই যে "প্রতিক্রিয়া" অংশটি অবশ্যই আইআইএস 7.5-এ ইউআরএল পুনর্লিখনের v2 এ "RESPONSE_www_authenticate" হিসাবে লেখা উচিত।
মাইকেল ফ্রিম্যান

3

যদি ডাব্লুডাব্লুডাব্লু-প্রমাণী শিরোনাম সরানো হয়, তবে আপনি শংসাপত্রগুলির ক্যাচিং পাবেন না এবং অনুরোধে অনুমোদন শিরোনামটি ফিরে পাবেন না। তার অর্থ এখন আপনার উত্পন্ন প্রতিটি নতুন অনুরোধের শংসাপত্রগুলি প্রবেশ করতে হবে।


এটি খুব গুরুত্বপূর্ণ, একেবারে দাগ দিন।
তেজ উইংফিল্ড

2

বিকল্পভাবে, আপনি যদি নিজের সার্ভারের প্রতিক্রিয়াটি কাস্টমাইজ করতে পারেন তবে আপনি একটি 403 নিষিদ্ধ ফিরিয়ে দিতে পারেন।

ব্রাউজারটি প্রমাণীকরণ পপআপটি খুলবে না এবং jquery কলব্যাক কল করা হবে।


5
এটি এইচটিটিপি ১.১ স্পেসিফিকেশনের বিপরীতে রয়েছে, যেখানে বলা আছে যে "... অনুমোদন সাহায্য করবে না এবং অনুরোধ করবে না যাতে পুনরাবৃত্তি করা উচিত নয়"।
Jukka Dahlbom

1
আপনার অ্যাক্সেসের অনুমতি নেই এমন সংস্থাগুলির জন্য প্রমাণীকরণের সময় 403 গ্রহণ করা বৈধ, 401 প্রেরণ করা উচিত যেখানে আপনাকে এখনও প্রমাণীকরণ করা হয়নি।
ব্রেট রায়ান

1

সাফারিতে, আপনি পপআপ প্রদর্শন করতে ব্রাউজারটিকে এড়াতে সিঙ্ক্রোনাস অনুরোধগুলি ব্যবহার করতে পারেন। অবশ্যই সিঙ্ক্রোনাস অনুরোধগুলি ব্যবহারকারীর শংসাপত্রগুলি যাচাই করার জন্য কেবল এই ক্ষেত্রে ব্যবহার করা উচিত ... আপনি প্রকৃত অনুরোধটি প্রেরণের আগে এমন অনুরোধটি ব্যবহার করতে পারেন যা সামগ্রীটি (প্রেরিত বা প্রাপ্ত) যথেষ্ট ভারী হলে খারাপ ব্যবহারকারীর অভিজ্ঞতার কারণ হতে পারে।

    var xmlhttp=new XMLHttpRequest;
    xmlhttp.withCredentials=true;
    xmlhttp.open("POST",<YOUR UR>,false,username,password);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.setRequestHeader('X-Requested-With', 'XMLHttpRequest');

অন্যান্য প্রসঙ্গে, "পোস্ট" এর পরিবর্তে "বিকল্পগুলি" ব্যবহার করাও সহায়তা করতে পারে।
এমানুয়েল সেলির

0

GET এর মাধ্যমে "ব্যবহারকারী" এবং "পাসওয়ার্ড" পরামিতি গ্রহণ করার চেয়ে একটি / লগইন ইউআরএল তৈরি করুন এবং বেসিক লেখার প্রয়োজন নেই। এখানে, পিএইচপি, নোড, জাভা, যা কিছু ব্যবহার করুন এবং আপনার পাসডওডি ফাইলকে পার্স করুন এবং এর বিপরীতে ম্যাচ প্যারামিটারগুলি (ব্যবহারকারী / পাস) করুন। যদি কোনও মিল থাকে তবে http: // ব্যবহারকারী: pass@domain.com/ এ পুনঃনির্দেশ করুন (এটি আপনার ব্রাউজারে শংসাপত্র স্থাপন করবে) যদি না হয় তবে 401 প্রতিক্রিয়া ( ডাব্লুডাব্লুডাব্লু -প্রমাণীকরণ শিরোনাম ছাড়াই) প্রেরণ করুন।


মিডল আক্রমণে প্লেইন-টেক্সট ম্যানের বাইরে থাকা কারওর পক্ষে ব্যবহারকারীর নাম / পাসওয়ার্ড স্নিগ্ধ করার চেষ্টা করার জন্য এটি দুর্দান্ত-দুর্দান্ত হবে!
আজাক্স

0

স্প্রিং বুটের সাথে পিছনের দিক থেকে আমি কাস্টম বেসিকঅথেন্টিকেশন এন্ট্রিপয়েন্টটি ব্যবহার করেছি:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.cors().and().authorizeRequests()
            ...
            .antMatchers(PUBLIC_AUTH).permitAll()
            .and().httpBasic()
//    https://www.baeldung.com/spring-security-basic-authentication
            .authenticationEntryPoint(authBasicAuthenticationEntryPoint())
            ...

@Bean
public BasicAuthenticationEntryPoint authBasicAuthenticationEntryPoint() {
    return new BasicAuthenticationEntryPoint() {
        {
            setRealmName("pirsApp");
        }

        @Override
        public void commence
                (HttpServletRequest request, HttpServletResponse response, AuthenticationException authEx)
                throws IOException, ServletException {
            if (request.getRequestURI().equals(PUBLIC_AUTH)) {
                response.sendError(HttpStatus.PRECONDITION_FAILED.value(), "Wrong credentials");
            } else {
                super.commence(request, response, authEx);
            }
        }
    };
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.