소유권 증명( DPoP ) 제시
DPoP 클라이언트가 공개-개인 키 쌍에 대한 소유권 증명을 제시함으로써 발신자 제한형 인증 토큰( OAuth )을 획득할 수 있는 메커니즘을 제공합니다.
이 사양은 현재 초안 단계입니다: https://datatracker.ietf.org/doc/html/draft-ietf-oauth-dpop-11.
DPoP HTTP 헤더
DPoP 헤더는 소유권 증명을 위한 핵심 정보를 포함하는 서명된 JWT입니다.
DPoP JWT의 JOSE 헤더에는 최소한 다음 매개변수가 포함되어야 합니다:
| 매개변수 | 설명 |
|---|---|
| 유형 | JWT의 유형. 이 값은 "dpop+jwt"여야 합니다. |
| alg | 서명 알고리즘. 유효한 값은 다음과 같습니다: RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384, ES512 |
| JWK | 공개 키를 나타내는 JSON 웹 키(JWK). 개인 키를 포함해서는 안 됩니다. |
JOSE 헤더 예시:
{
"typ": "dpop+jwt",
"alg": "RS256",
"jwk": {
"kty": "RSA",
"n": "...",
"e": "AQAB"
}
}
DPoP JWT의 페이로드에는 최소한 다음 클레임이 포함되어야 합니다:
| 청구 이름 | 설명 |
|---|---|
| jti | 이 JWT의 고유 식별자. |
| htm | JWT가 첨부된 요청의 ` HTTP ` 메서드. |
| htu | 쿼리 및 프래그먼트 부분이 제외된 HTTP 대상 URI. 이것은 Pushed Authorization Request(PAR) 엔드포인트 또는 토큰 엔드포인트일 것입니다. |
| iat | JWT의 생성 타임스탬프. |
JWT 페이로드 예시:
{
"jti": "3765f59c-43cd-4cf8-8180-73bc9ae4ff3c",
"htm": "POST",
"htu": "https://<tenant-hostname>/oauth2/token",
"iat": 1661847227
}
DPoP JWT는 개인 키로 서명되어야 하며, 해당 서명은 JWT의 JOSE 헤더에 포함된 공개 키로 검증 가능해야 합니다. JWT의 유효 기간은 30분을 초과해서는 안 됩니다. iat클레임이 없는 exp 경우, 이 JWT의 만료 시간은 에 명시된 생성 타임스탬프로부터 30분 후로 간주됩니다.
DPoPJWT는 라는 이름의 헤더에 포함되어 전송됩니다.
요청 예시:
curl -ki https://<tenantId>/oauth2/token
-H "DPoP: eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6Il..."
-d "grant_type=client_credentials&client_secret=<secret>&client_id=<clientId>"
요청 권한 부여
인증 요청에는 쿼리 매개변수나 POST 본문에 JSON 웹 키의 썸프린트가 포함됩니다.
| 매개변수 | 설명 |
|---|---|
| dpop_jkt | 이 인증 요청과 연결될 JSON 웹 키의 썸프린트. |
https://<tenantId>/oauth2/authorize?grant_type=authorization_code&client_id=<clientId>&redirect_uri=<redirect_uri>&dpop_jkt=<dpop_jkt>&...
이 요청에 대해 생성된 인증 코드는 해당 썸프린트에 바인딩되며, 토큰 요청 시 유효성 검사에 사용됩니다. 이를 통해 토큰 요청 시 코드를 토큰으로 교환할 때, 동일한 개인 키를 보유하지 않은 제3자가 인증 코드를 탈취하여 사용하는 것을 방지할 수 있습니다.
지문(thumbprint)을 dpop_jkt 안전하게 전송하려면 Pushed Authorization Requests(PAR) 또는 요청 객체를 DPoP, 와 함께 사용하는 것이 좋습니다. dpop_jkt또는 PAR을 사용할 경우,. 대신 ` DPoP ` 헤더를 사용할 수 있습니다. 자세한 내용은 위 항목을 참조하십시오 DPoP HTTP header . OpenID Connect 애플리케이션을 구성할 때 [ ]을 선택하면 Require pushed
authorization request (PAR) 푸시 방식의 인증 요청을 적용할 수 있습니다.
토큰 요청
액세스 토큰 및 리프레시 토큰 요청에는 DPoP HTTP 헤더가 반드시 포함되어야 합니다. 자세한 내용은 위 항목을 참조하십시오 DPoP HTTP
header .
인증 코드 흐름의 경우, 이 JWK의 썸프린트는 인증 요청 시 전송된 JWK 썸프린트(dpop_jkt)와 일치해야 합니다.
요청 예시:
curl -ki https://<tenantId>/oauth2/token
-H "DPoP: eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6Il..."
-d "grant_type=client_credentials&client_secret=<secret>&client_id=<clientId>"
이 흐름을 수행한 결과, 소유권 증명에 바인딩된 일련의 토큰이 생성됩니다. 이는 토큰 인트로스펙션을 통해 확인할 수 있습니다.
토큰 내부 구조 분석
- DPoPtoken_type: 대신 이 값은 가 bearer 될 것입니다.
- cnf: JWK 엄지손가락 지문 확인 요청은 공개 키의 해시를 반환합니다.
내성 응답 예시:
{
...,
"cnf": {
"jkt": "yrFAH18WFPml9e9IIo6rB_fLdFX1pdbMgIcd_fW_4aM="
},
"token_type": "DPoP",
...
}