기본 인증을 위한 올바른 인증 헤더를 보내는 방법
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: Advanced 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 방식
https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding 및 http://en.wikipedia.org/wiki/Basic_access_authentication 에서는, 유저명과 패스워드를 URL 에 입력하지 않고, 헤더를 사용해 베이직 인증을 실시하는 방법을 나타냅니다.이렇게 해도 네트워크에 액세스할 수 있는 사용자 또는 이 JS 코드(예: 브라우저에서 실행하는 사용자)로부터 사용자 이름 또는 암호를 숨기지는 않습니다.
$.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))))
}
});
NodeJS 답변:
Node를 사용하여 작업하고 싶은 경우JS: GET to JSON 엔드포인트 만들기Authorization
header와 get a.Promise
뒷면:
첫번째
npm install --save request request-promise
(npm에 참조) 그리고 나서.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
});
URL 의 일부로서 유저와 패스워드를 포함할 수 있습니다.
http://user:passwd@www.server.com/index.html
자세한 내용은 이 URL을 참조하십시오.
URL 및 암호화로 전달된 HTTP 기본 인증 자격 증명
물론 사용자 이름 비밀번호가 필요합니다.'Basic hashstring
.
이게 도움이 되길...
브라우저 환경에 있는 경우 btoa도 사용할 수 있습니다.
btoa
는 문자열을 인수로 사용하여 Base64 부호화된 ASCII 문자열을 생성하는 함수입니다.97%의 브라우저에서 지원됩니다.
예:
> "Basic " + btoa("billy"+":"+"secretpassword")
< "Basic YmlsbHk6c2VjcmV0cGFzc3dvcmQ="
그런 다음 추가 가능Basic YmlsbHk6c2VjcmV0cGFzc3dvcmQ=
에게authorization
header를 클릭합니다.
HTTP BASIC 인증에 관한 통상의 경고가 적용되는 것에 주의해 주세요.가장 중요한 것은 https 경유로 트래픽을 송신하지 않는 경우, 도청은 단순히 Base64 부호화 스트링을 디코딩하고 패스워드를 취득할 수 있습니다.
이 security.stackexchange.com의 답변에서는 단점 중 몇 가지를 개략적으로 설명합니다.
URL의 일부로 사용자 및 비밀번호를 사용할 필요가 없습니다.
이거 드셔보세요
byte[] encodedBytes = Base64.encodeBase64("user:passwd".getBytes());
String USER_PASS = new String(encodedBytes);
HttpUriRequest request = RequestBuilder.get(url).addHeader("Authorization", USER_PASS).build();
PHP - 컬:
$username = 'myusername';
$password = 'mypassword';
...
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
...
PHP - WordPress의 POST:
$username = 'myusername';
$password = 'mypassword';
...
wp_remote_post('https://...some...api...endpoint...', array(
'headers' => array(
'Authorization' => 'Basic ' . base64_encode("$username:$password")
)
));
...
언급URL : https://stackoverflow.com/questions/18264601/how-to-send-a-correct-authorization-header-for-basic-authentication
'programing' 카테고리의 다른 글
SQL Server의 IsNull() 함수와 동등한 Oracle은 무엇입니까? (0) | 2023.03.17 |
---|---|
인터페이스 {}에서 []바이트 변환(골랑) (0) | 2023.03.17 |
Wordpress에서 다른 관리 페이지로 리디렉션하는 방법 (0) | 2023.03.17 |
JSON simplejson을 사용한 장고 모델 시리얼화 (0) | 2023.03.17 |
Angularjs 멀티파트 폼 데이터 및 파일 업로드 방법 (0) | 2023.03.17 |