JWT를위한 최고의 HTTP 인증 헤더 유형


228

JWT 토큰에 가장 적합한 AuthorizationHTTP 헤더 유형 이 무엇인지 궁금합니다 .

아마 가장 인기있는 유형 중 하나는 Basic입니다. 예를 들어 :

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

로그인 및 비밀번호와 같은 두 가지 매개 변수를 처리합니다. 따라서 JWT 토큰과 관련이 없습니다.

또한 Bearer 유형에 대해 들었습니다 .

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

그러나 나는 그 의미를 모른다. 곰과 관련이 있습니까?

HTTP Authorization헤더 에서 JWT 토큰을 사용하는 특별한 방법이 있습니까? 우리를 사용해야합니까 Bearer, 아니면 단순화하고 사용해야합니까?

Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

감사.

편집하다:

아니면 JWTHTTP 헤더 일 수도 있습니다.

JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

답변:


295

클라이언트가 액세스 토큰 (JWT 또는 다른 토큰)을 보내는 데 가장 적합한 HTTP 헤더 AuthorizationBearer인증 체계 가있는 헤더입니다 .

이 체계는 RFC6750에 의해 설명됩니다 .

예:

GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIXVCJ9TJV...r7E20RMHrHDcEfxjoYZgeFONFh7HgQ

보다 강력한 보안 보호가 필요한 경우 다음 IETF 초안 ( https://tools.ietf.org/html/draft-ietf-oauth-pop-architecture) 도 고려할 수 있습니다 . 이 초안은 https://tools.ietf.org/html/draft-ietf-oauth-v2-http-mac에 대한 좋은 대안으로 보입니다 .

이 RFC 및 위의 사양이 OAuth2 Framework 프로토콜과 관련되어 있어도 클라이언트와 서버 간의 토큰 교환이 필요한 다른 컨텍스트에서 사용될 수 있습니다.

사용자 정의와는 달리 JWT당신이 당신의 질문에 언급 방식 하나는 IANA에 등록됩니다 .Bearer

에 관한 BasicDigest인증 체계, 그들은 사용자 이름과 비밀 (참조하여 인증하기 위해 최선을 다하고 있습니다 RFC7616RFC7617를 ) 그 상황에서 그렇게 적용되지합니다.


3
감사합니다! 이 Bearer키워드 의 출처를 확인하는 것이 좋습니다 . 그러나 OAuth에서 나옵니다. 그러나 JAuth는 OAuth없이 사용할 수 있습니다. OAuth 사양과는 완전히 독립적입니다.
Zag zag ..

2
예. OAuth2 프레임 워크 프로토콜에서 제공되지만 다른 컨텍스트에서 사용할 수 있습니다. 서버는 JWT (예 : 신체의 요청 또는 쿼리 문자열에) 다른 헤더 또는 방법을 사용하여 받아 들일 무료이지만, Authenticate헤더 더 적합하고 준수 RFC7235 HTTP를 1.1 컨텍스트에서 인증 프레임 워크를 설명
플로랑 Morselli

1
"JWT"와 같은 사용자 지정 체계가 OAuth2 Bearer 체계를 이것에 강제하는 것보다 더 적절한 것 같습니다 Zag zag에 동의합니다.
l8nite

50
이것이 정답입니다. jwt.io/introduction 인용 : "사용자 에이전트는 일반적으로 Bearer 스키마를 사용하여 Authorization 헤더에서 JWT를 보내야합니다. 헤더의 내용은 다음과 같아야합니다. Authorization : Bearer <token>"
wrschneider

3
누군가에게 도움이된다면-나는이 예제를 찾고 여기에왔다 :-베어러 방식을 사용한 컬 요청 :curl -H "Authorization: Bearer <TOKEN>" <the rest of your curl cmd>
Kevin Friedheim

76

짧은 답변

Bearer인증 방식은 당신을 위해 무엇을 찾고 있습니다.

긴 대답

곰과 관련이 있습니까?

어 ... 아니요 :)

Oxford Dictionaries 에 따르면 , bearer 의 정의는 다음과 같습니다.

무기명 / ˈbɛːrə /
명사

  1. 무언가를 운반하거나 보유하는 사람이나 물건.

  2. 수표 나 돈을 지불하라는 명령을 내린 사람.

첫 번째 정의에는 메신저 , 에이전트 , 컨베이어 , 사절 , 캐리어 , 공급자 동의어가 포함됩니다 .

RFC 6750 에 따른 베어러 토큰 의 정의는 다음과 같습니다.

1.2. 술어

무기명 토큰

토큰을 소유 한 당사자 ( "소지자")가 소유 한 다른 당사자가 토큰을 소유 할 수있는 속성을 가진 보안 토큰. 베어러 토큰을 사용하면 베어러가 암호화 키 자료 (소지 증명)를 소유하고 있음을 증명할 필요가 없습니다.

Bearer인증 방식입니다 IANA에 등록 하고 원래 정의 RFC 6750 의 OAuth 2.0 인증 프레임 워크,하지만 아무것도 사용에서 당신을 멈추지 Bearer의 OAuth 2.0을 사용하지 않는 응용 프로그램에 액세스 토큰에 대한 계획을.

가능한 한 표준을 고수하고 자체 인증 체계를 만들지 마십시오.


인증 체계를 Authorization사용하여 요청 헤더 에 액세스 토큰을 보내야합니다 Bearer.

2.1. 권한 부여 요청 헤더 필드

AuthorizationHTTP / 1.1에 의해 정의 된 요청 헤더 필드 에서 액세스 토큰을 전송할 때 클라이언트는 Bearer인증 체계를 사용 하여 액세스 토큰을 전송합니다.

예를 들면 다음과 같습니다.

GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM

[...]

클라이언트는 HTTP 인증 체계 Authorization와 함께 요청 헤더 필드를 사용하여 베어러 토큰으로 인증 된 요청을 작성해야합니다 Bearer. [...]

토큰이 유효하지 않거나 누락 된 경우 Bearer스킴이 WWW-Authenticate응답 헤더에 포함되어야합니다 .

3. WWW 인증 응답 헤더 필드

보호 자원 요청에 인증 신임 정보가 포함되어 있지 않거나 보호 자원에 액세스 할 수있는 액세스 토큰이없는 경우, 자원 서버는 반드시 HTTP WWW-Authenticate응답 헤더 필드 [...]를 포함해야합니다 .

이 사양으로 정의 된 모든 문제는 반드시 auth-scheme 값을 사용해야합니다 Bearer. 이 체계 뒤에는 하나 이상의 auth-param 값이 와야합니다. [...].

예를 들어 인증없이 보호 된 리소스 요청에 대한 응답으로 :

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="example"

만료 된 액세스 토큰을 사용한 인증 시도로 보호 된 자원 요청에 응답하여 다음을 수행하십시오.

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="example",
                         error="invalid_token",
                         error_description="The access token expired"

5
예. 곰과 관련이 있습니다. 같은 방식으로 파이썬은 뱀과 관련이 있습니다. 어.
Nicholas Hamilton

4
곰 .. 그렇게 하죠. 하루를 만들어 주셔서 감사합니다.
user2501323

다음과 같은 경우에 취약점이 있습니까? 사용자에게 토큰을 제공하지만 요청을 보내려면 요청 본문에 토큰을 다시 보내야합니까? 그런 다음 거기에서 가져와 유효성을 검사합니까? 그들이 요청을 보내는 방식이 나에 의해 정의되지 않았기 때문에 실제로 다른 옵션을 가지고 있지 않지만 그것이 나쁘거나 더 안전한 솔루션이 있다면 관심이 있습니다.
Daniel Jeney
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.