121

API から POST データを送信しようとしていますが、基本認証に合格できません。

私は試します:

$.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"

Advanced REST Client (Chrome Extension)からAPIにアクセスできるので、サーバー構成が良いのでしょう。

助言がありますか?

PD: 高度な REST クライアントから取得したヘッダーは次のとおりです。

    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

OPTION方式の送付

4

6 に答える 6

17

ブラウザ環境の場合は、btoaも使用できます。

btoa文字列を引数として受け取り、Base64 でエンコードされた ASCII 文字列を生成する関数です。ブラウザの 97% でサポートされています。

例:

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

Basic YmlsbHk6c2VjcmV0cGFzc3dvcmQ=その後、authorizationヘッダーに追加できます。

HTTP BASIC 認証に関する通常の警告が適用されることに注意してください。最も重要なのは、https 経由でトラフィックを送信しない場合、盗聴された人は Base64 でエンコードされた文字列を単純にデコードして、パスワードを取得できることです。

この security.stackexchange.comの回答は、いくつかの欠点の概要を示しています。

于 2017-08-07T11:39:48.093 に答える