মৌলিক প্রমাণীকরণের জন্য কীভাবে সঠিক অনুমোদনের শিরোনাম প্রেরণ করা যায়


102

আমি আমার এপিআই থেকে ডেটা পোস্ট করার চেষ্টা করছি তবে আমি মৌলিক প্রমাণীকরণটি পাস করতে পারি না।

আমি চেষ্টা করি:

$.ajax({
  type: 'POST',
  url: http://theappurl.com/api/v1/method/,
  data: {},
  crossDomain: true,
  beforeSend: function(xhr) {
    xhr.setRequestHeader('Authorization', 'Basic [REDACTED]');
  }
});

আমার সার্ভার কনফিগারেশন প্রতিক্রিয়াটি হ'ল:

response["Access-Control-Allow-Origin"] = "*"
response["Access-Control-Allow-Methods"] = "POST"
response["Access-Control-Max-Age"] = "1000"
response["Access-Control-Allow-Headers"] = "*"

আমি যে শিরোনাম পেয়েছি তা হ'ল:

অনুরোধ শিরোনাম

OPTIONS /api/v1/token-auth/ HTTP/1.1
Host: theappurl.com
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://127.0.0.1:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.63 Safari/537.31
Access-Control-Request-Headers: origin, authorization, content-type
Accept: */*
Referer: http://127.0.0.1:8080/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: es,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

প্রতিক্রিয়া শিরোনাম

HTTP/1.1 401 Unauthorized
Server: nginx/1.1.19
Date: Fri, 16 Aug 2013 01:29:21 GMT
Content-Type: text/html
Content-Length: 597
Connection: keep-alive
WWW-Authenticate: Basic realm="Restricted"

আমার ধারণা সার্ভার কনফিগারেশনটি ভাল কারণ আমি উন্নত REST ক্লায়েন্ট (ক্রোম এক্সটেনশন) থেকে API এ অ্যাক্সেস করতে পারি

কোনও পরামর্শ?

পিডি: অ্যাডভান্সড আরএসটি ক্লায়েন্টের কাছ থেকে আমি যে শিরোনাম পাই তা হ'ল:

    User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.63 Safari/537.31
    Origin: chrome-extension://hgmloofddffdnphfgcellkdfbfbjeloo
    Authorization: Basic [REDACTED]
    Content-Type: application/x-www-form-urlencoded 
    Accept: */*
    Accept-Encoding: gzip,deflate,sdch
    Accept-Language: es,en;q=0.8
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

এবং

    Server: nginx/1.1.19 
    Date: Fri, 16 Aug 2013 01:07:18 GMT 
    Content-Type: application/json; charset=utf-8 
    Transfer-Encoding: chunked 
    Connection: keep-alive
    Vary: Accept, Cookie 
    Allow: POST, OPTIONS 
    X-Robots-Tag: noindex

অপশন পদ্ধতি প্রেরণ করা হচ্ছে


19
আমি বুঝতে পারি যে এই পোস্টটি দীর্ঘই মারা গেছে, তবে আমি কেবল এটিই উল্লেখ করতে চাই যে আপনি যদি নিজের অনুমোদন পোস্ট না করে সচেতন হন: শিরোনাম, আপনি অবশ্যই নিজের পাসওয়ার্ডটি সাফ মধ্যে পোস্ট করেছেন। জিব্বারিশের স্ট্রিংটি আপনার ব্যবহারকারীর নাম: পাসওয়ার্ডের বেস বেস 64 আশা করি আপনি এটি বুঝতে পেরেছেন এবং এখানে একটি ডামি পাসওয়ার্ড ব্যবহার করেছেন :)
লেক্সেলবি

এটি এসএসআর রিপোর্ট সার্ভার 2017 এর সাথে দুর্দান্ত কাজ করে It এটি URL এ পাসওয়ার্ড এবং ব্যবহারকারীর নামটি লুকায়।
ক্লার্ক ভেরা

@ লেক্সলবি: স্প্যানিশ ভাষায় ব্যবহারকারীর নাম "ব্যবহারকারী" এবং পাসওয়ার্ডটি "এবং পাসওয়ার্ড"। সুতরাং আমি অনুমান করছি যে এটি বাস্তব শংসাপত্র নয়।
পিডিআর

উত্তর:


48

আপনি ইউআরএল এর অংশ হিসাবে ব্যবহারকারী এবং পাসওয়ার্ড অন্তর্ভুক্ত করতে পারেন:

http://user:passwd@www.server.com/index.html

আরও জন্য এই URL টি দেখুন

এইচটিটিপি বেসিক প্রমাণীকরণ শংসাপত্রগুলি ইউআরএল এবং এনক্রিপশনে পাস করেছে

অবশ্যই, আপনার ব্যবহারকারীর নাম পাসওয়ার্ড প্রয়োজন, এটি না 'Basic hashstring

আশাকরি এটা সাহায্য করবে...


6
এই সমাধানটি অ্যান্ড্রয়েডের নেটিভ ব্রাউজার (প্রাক কিটকাট) এর জন্য কাজ করবে না। ব্যবহারকারীর নাম / লগইন ফর্মটি এখনও আপনার ব্যবহারকারীর জন্য পপআপ করবে, তাই সাবধান হন।
স্টার্লিং বোর্ন

59
এই পদ্ধতিটি নেটওয়ার্ক বা ডিভাইসগুলির যে কেউ শুনছেন তার কাছে ব্যবহারকারীর নাম এবং পাসওয়ার্ড উন্মোচিত করেছে ...
অ্যাডাম

5
@ অ্যাডাম হ্যাশ স্ট্রিংও নিরাপদ নয়
মোস্তফা

40
এটি প্রশ্নের কোনও উত্তর দেয় না। এটি ইউআরএল হিসাবে পাস করা শিরোনাম নয়।
jililii

5
ডাউনভোট কারণ: বিকাশকারী.মোজিলা.আর.ইন / ইউএস / ডকস / ওয়েব / এইচটিটিপি / স্বীকৃতি । নিবন্ধের শেষে, এটি উল্লেখ করেছে যেThe use of these URLs is deprecated
অনুরাগ

72

প্রতি https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding এবং http://en.wikipedia.org/wiki/Basic_access_authentication , এখানে কিভাবে পরিবর্তে একটি হেডার সঙ্গে বুনিয়াদি প্রমাণীকরণ করতে ইউআরএল ব্যবহারকারীর নাম এবং পাসওয়ার্ড রাখার। নোট করুন যে এটি এখনও নেটওয়ার্ক বা এই জেএস কোড অ্যাক্সেস সহ কারও কাছ থেকে ব্যবহারকারীর নাম বা পাসওয়ার্ড গোপন করে না (যেমন কোনও ব্যবহারকারী এটি ব্রাউজারে কার্যকর করছে):

$.ajax({
  type: 'POST',
  url: http://theappurl.com/api/v1/method/,
  data: {},
  crossDomain: true,
  beforeSend: function(xhr) {
    xhr.setRequestHeader('Authorization', 'Basic ' + btoa(unescape(encodeURIComponent(YOUR_USERNAME + ':' + YOUR_PASSWORD))))
  }
});

4
দ্রষ্টব্য: এই বৈশিষ্ট্যটি আইআই 6,7,8,9 এ কাজ করতে বেস 64.js এর মতো একটি উইন্ডো.বিটোয়া পলফিল প্রয়োজন হবে। ECMAScript v3 অনুযায়ী অনস্কেপকে অবহেলা করা হয়েছে।
নীল

@ টেকব্রাঞ্চ আপনার ভুল হয়ে গেছে, সিনপ ২ কে এর উদাহরণটি খুব ভাল কাজ করেছে, এটি ইউনিকোড অক্ষরকে এএসসিআই-তে ডিকোড করার জন্য একটি অতি পরিচিত কৌশল ব্যবহার করে, এটি আসলে এই সত্যটি ব্যবহার করে যে (আন) পালানো ইউনিকোড সমর্থন করে না, তবে (ডেস্ক) এনকোডিউআরআইকিউম্পোনেন্ট দেয় ..

43

নোডজেএস উত্তর:

আপনি যদি নোডজেএস দিয়ে এটি করতে চেয়েছিলেন: Authorizationশিরোনাম দিয়ে জেএসএন শেষ পয়েন্টে একটি জিইটি করুন এবং Promiseফিরে পান:

প্রথম

npm install --save request request-promise

( এনপিএম দেখুন ) এবং তারপরে আপনার .jsফাইলে:

var requestPromise = require('request-promise');

var user = 'user';
var password = 'password';

var base64encodedData = Buffer.from(user + ':' + password).toString('base64');

requestPromise.get({
  uri: 'https://example.org/whatever',
  headers: {
    'Authorization': 'Basic ' + base64encodedData
  },
  json: true
})
.then(function ok(jsonData) {
  console.dir(jsonData);
})
.catch(function fail(error) {
  // handle error
});

4
ধন্যবাদ, আপনি আমার দিনটি সংরক্ষণ করেছেন :)
9-29 এ স্পার করুন

ধন্যবাদ এটি আমার প্রতিক্রিয়া অ্যাপ্লিকেশনটিতে কাজ করেছে যা "আনতে" ব্যবহার করেছে
মোহসেনএফএম

13

আপনি যদি ব্রাউজারের পরিবেশে থাকেন তবে আপনি বিটিওও ব্যবহার করতে পারেন ।

btoaএকটি ফাংশন যা আর্গুমেন্ট হিসাবে একটি স্ট্রিং নেয় এবং একটি বেস 64 এনকোডেড ASCII স্ট্রিং উত্পাদন করে। এটি ব্রাউজারগুলির 97% দ্বারা সমর্থিত ।

উদাহরণ:

> "Basic " + btoa("billy"+":"+"secretpassword")
< "Basic YmlsbHk6c2VjcmV0cGFzc3dvcmQ="

তারপরে আপনি হেডারটিতে যুক্ত Basic YmlsbHk6c2VjcmV0cGFzc3dvcmQ=করতে পারেন authorization

মনে রাখবেন যে HTTP বেসিক লেখার বিষয়ে সাধারণ সতর্কতাগুলি প্রযোজ্য, সর্বাধিক গুরুত্বপূর্ণ যদি আপনি https- র মাধ্যমে আপনার ট্র্যাফিক না প্রেরণ করেন তবে একটি পাসওয়ার্ড ছাপিয়ে কেবল বেস 64 এ এনকোডড স্ট্রিংটিকে এভাবে পাসওয়ার্ড প্রাপ্ত করতে ডিকোড করতে পারে।

এই সিকিউরিটি.স্ট্যাকেক্সচেঞ্জ.কম উত্তরটি কিছুটা ডাউনসাইডের একটি ভাল ওভারভিউ দেয়।


3

URL এর অংশ হিসাবে ব্যবহারকারী এবং পাসওয়ার্ড ব্যবহার করার দরকার নেই

আপনি এটি চেষ্টা করতে পারেন

byte[] encodedBytes = Base64.encodeBase64("user:passwd".getBytes());

String USER_PASS = new String(encodedBytes);

HttpUriRequest request = RequestBuilder.get(url).addHeader("Authorization", USER_PASS).build();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.