Een correcte autorisatieheader verzenden voor basisverificatie

Ik probeer gegevens van mijn API te POST, maar ik krijg de basisverificatie niet door.

Ik probeer:

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

Mijn reactie op de serverconfiguratie is:

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

De headers die ik krijg zijn:

Verzoek 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

Reactiekop

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"

Ik denk dat de serverconfiguratie goed is omdat ik toegang heb tot de API via de Geavanceerde REST-client(Chrome-extensie)

Heeft u suggesties?

PD:
De header die ik krijg van de Advanced REST-client is:

   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

en

   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

verzendmethode OPTIE


Antwoord 1, autoriteit 100%

Per https://developer.mozilla.org/en -US/docs/Web/API/WindowBase64/Base64_encoding_and_decodingen http://en.wikipedia. org/wiki/Basic_access_authentication, hier leest u hoe u een basisverificatie uitvoert met een header in plaats van de gebruikersnaam en het wachtwoord in de URL te zetten. Merk op dat dit de gebruikersnaam of het wachtwoord nog steeds niet verbergt voor iedereen met toegang tot het netwerk of deze JS-code (bijvoorbeeld een gebruiker die het in een browser uitvoert):

$.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))))
  }
});

Antwoord 2, autoriteit 70%

U kunt de gebruiker en het wachtwoord als onderdeel van de URL opnemen:

http://user:[email protected]/index.html

zie deze URL voor meer

Inloggegevens voor HTTP-basisverificatie doorgegeven in URL en versleuteling

natuurlijk heb je het gebruikersnaamwachtwoord nodig, het is niet 'Basic hashstring.

hoop dat dit helpt…


Antwoord 3, autoriteit 64%

NodeJS antwoord:

In het geval je het met NodeJS wilde doen: maak een GET to JSON endpoint met Authorizationheader en krijg een Promiseterug:

Eerste

npm install --save request request-promise

(zie op npm) en vervolgens in uw .jsbestand:

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
});

Antwoord 4, autoriteit 20%

Als u zich in een browseromgeving bevindt, kunt u ook btoa gebruiken .

btoais een functie die een string als argument neemt en een Base64-gecodeerde ASCII-string produceert. Het wordt ondersteund door 97% van de browsers.

Voorbeeld:

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

U kunt vervolgens Basic YmlsbHk6c2VjcmV0cGFzc3dvcmQ=toevoegen aan de authorization-header.

Houd er rekening mee dat de gebruikelijke waarschuwingen over HTTP BASIC-verificatie van toepassing zijn, vooral als u uw verkeer niet via https stuurt, kan een afgeluisterde eenvoudig de met Base64 gecodeerde string decoderen en zo uw wachtwoord verkrijgen.

Dit security.stackexchange.com-antwoord geeft een goed overzicht van enkele van de nadelen.


Antwoord 5, autoriteit 4%

gebruiker en wachtwoord niet nodig als onderdeel van de URL

je kunt dit proberen

byte[] encodedBytes = Base64.encodeBase64("user:passwd".getBytes());
String USER_PASS = new String(encodedBytes);
HttpUriRequest request = RequestBuilder.get(url).addHeader("Authorization", USER_PASS).build();

Antwoord 6

PHP – krul:

$username = 'myusername';
$password = 'mypassword';
...
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
...

PHP – POST in WordPress:

$username = 'myusername';
$password = 'mypassword';
...
wp_remote_post('https://...some...api...endpoint...', array(
  'headers' => array(
    'Authorization' => 'Basic ' . base64_encode("$username:$password")
  )
));
...

Other episodes