[rest] 기본 HTTP 및 Bearer 토큰 인증

현재 개발 환경을 위해 HTTP-Basic으로 보호되는 REST-API를 개발 중입니다. 실제 인증은 토큰을 통해 이루어지기 때문에 두 개의 인증 헤더를 보내는 방법을 알아 내려고 여전히 노력하고 있습니다.

나는 이것을 시도했다 :

curl -i http://dev.myapp.com/api/users \
  -H "Authorization: Basic Ym9zY236Ym9zY28=" \
  -H "Authorization: Bearer mytoken123"

예를 들어 내 IP에 대한 HTTP 인증을 비활성화 할 수 있지만 일반적으로 동적 IP를 사용하는 다른 환경에서 작업하기 때문에 이것은 좋은 솔루션이 아닙니다. 그래서 내가 뭔가를 놓치고 있습니까?



답변

URL에서 기본 인증을 푸시하려면 다음을 시도하십시오.

curl -i http://username:password@dev.myapp.com/api/users -H "Authorization: Bearer mytoken123"
               ^^^^^^^^^^^^^^^^^^

위의 방법이 작동하지 않으면 그와 관련이 없습니다. 따라서 다음 대안을 시도하십시오.

다른 이름으로 토큰을 전달할 수 있습니다. 귀하는 귀하의 애플리케이션에서 승인을 처리하고 있기 때문입니다. 따라서 이러한 특수 목적을 위해 이러한 유연성을 쉽게 사용할 수 있습니다.

curl -i http://dev.myapp.com/api/users \
  -H "Authorization: Basic Ym9zY236Ym9zY28=" \
  -H "Application-Authorization: mytoken123"

헤더를 Application-Authorization. 따라서 응용 프로그램에서 해당 헤더 아래에있는 토큰을 찾아 필요한 작업을 처리합니다.

또 다른 방법 tokenPOST매개 변수 를 전달 하고 서버 측에서 매개 변수 값을 가져 오는 것입니다. 예를 들어 curl post 매개 변수를 사용하여 토큰을 전달합니다.

-d "auth-token=mytoken123"


답변

표준 ( https://tools.ietf.org/html/rfc6750 )은 다음을 사용할 수 있다고 말합니다.

  • 양식 인코딩 본문 매개 변수 : 인증 : Bearer mytoken123
  • URI 쿼리 매개 변수 : access_token = mytoken123

따라서 URI로 많은 Bearer Token을 전달할 수 있지만 이렇게하는 것은 권장되지 않습니다 (표준의 섹션 5 참조).


답변

사이에 nginx와 같은 역방향 프록시를 사용하는 경우 X-API-Token.

nginx에서는 업스트림 프록시 (나머지 API)가 인증이되도록 다시 작성합니다.

proxy_set_header Authorization $http_x_api_token;

… nginx는 원래 Authorization 헤더를 사용하여 HTTP AUth를 확인할 수 있습니다.


답변

비슷한 문제가 발생했습니다. 장치에서 장치와 사용자를 인증했습니다. Cookie헤더와 함께 헤더를 사용했습니다 Authorization: Bearer....


답변

컬 –anyauth

curl에게 자체 인증 방법을 알아 내고 원격 사이트에서 지원한다고 주장하는 가장 안전한 방법을 사용하도록 지시합니다. 이는 먼저 요청을 수행하고 응답 헤더를 확인하여 수행되므로 추가 네트워크 왕복이 발생할 수 있습니다. –basic, –digest, –ntlm 및 –negotiate를 사용하여 수행 할 수있는 특정 인증 방법을 설정하는 대신 사용됩니다.


답변

개발 서버에서 API를 테스트하기위한 또 다른 솔루션이 있습니다.

  • HTTP Basic Authentication웹 경로에 대해서만 설정
  • 모든 API 경로를 인증에서 제외하십시오.

에 대한 웹 서버 구성 nginxLaravel같이 될 것이다 :

    location /api {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location / {
        try_files $uri $uri/ /index.php?$query_string;

        auth_basic "Enter password";
        auth_basic_user_file /path/to/.htpasswd;
    }

Authorization: Bearer 웹 크롤러 및 기타 원치 않는 방문자로부터 개발 서버를 방어하는 작업을 수행합니다.


답변

nginx를 사용하면 다음과 같이 두 토큰을 모두 보낼 수 있습니다 (표준에 위배 되더라도).

Authorization: Basic basic-token,Bearer bearer-token

이것은 기본 토큰이 첫 번째 인 한 작동합니다. nginx는이를 애플리케이션 서버로 성공적으로 전달합니다.

그런 다음 애플리케이션이 위의 문자열에서 Bearer를 올바르게 추출 할 수 있는지 확인해야합니다.