JSON Web Token
JSON Web Token (JWT) 인증 방법 (JSON Web Token (JWT) Auth Method)
jwt 인증 방법을 사용해 JWT를 직접 제공하여 Nomad에 인증해요. JWT는 로컬에서 제공되는 키로 암호화 검증되거나, 구성된 경우 OIDC Discovery 서비스를 사용해 적절한 키를 가져올 수 있어요.
출처: 문서
본문
주어진 검증 방법으로 JWT 인증 방법을 만드는 데 필요한 파라미터는 auth-method create를 참고해요.
JWT 검증 (JWT Verification)
Nomad는 발급자(issuer)의 공개 키로 JWT 서명을 검증해요. 이 프로세스는 다음 방법 중 하나를 사용해요:
- 정적 키 (Static Keys) — 공개 키 집합이 구성에 직접 저장돼요.
- JWKS — JSON Web Key Set (JWKS) URL과 선택적 인증서 체인을 구성해요. Nomad는 인증 중 이 엔드포인트에서 키를 가져와요.
- OIDC Discovery — OIDC Discovery URL과 선택적 인증서 체인을 구성해요. Nomad는 인증 중 이 URL에서 키를 가져와요. OIDC Discovery를 사용하면 Nomad는
iss와aud같은 OIDC 검증 기준을 적용해요.
여러 방법이 필요하면 이 유형의 인증 방법을 다른 이름으로 하나 더 만들어요.
클레임 매핑을 통한 신뢰된 아이덴티티 속성 (Trusted Identity Attributes via Claim Mappings)
인증 단계는 JWT 클레임의 데이터를 바인딩 규칙 선택자(selector)와 바인드 이름 보간에 사용할 신뢰된 아이덴티티 속성으로 반환할 수 있어요.
ClaimMappings 및 ListClaimMappings 속성은 Nomad가 클레임을 아이덴티티 속성에 매핑하는 방법을 제어해요. 둘 다 복사할 항목의 맵이며, 요소 형식은 "<JWT claim>":"<attribute suffix>"이에요.
단일 값을 매핑하려면 ClaimMappings을, 값 목록을 매핑하려면 ListClaimMappings을 사용해요.
이 예제에는 ClaimMappings과 ListClaimMappings이 포함돼 있어요. 이 구성은 Nomad가 JWT 클레임 "givenName"과 "surname"의 값을 각각 "value.first_name"과 "value.last_name"이라는 이름의 속성에 복사하도록 지시해요. 또한 Nomad는 JWT 클레임 "groups"의 값 목록을 "list.roles"라는 속성에 복사해야 해요.
"Name": "example-auth-method",
"Type": "<jwt|oidc>",
"Description": "Example auth method",
"Config": {
"ClaimMappings": {
"givenName": "first_name",
"surname": "last_name"
},
"ListClaimMappings": {
"groups": "roles"
}
}
}
다음 표는 결과 속성과 규칙 바인딩에서 사용할 수 있는 방법을 보여줘요:
| 속성 | 지원되는 선택자 작업 | 보간 가능 여부 |
|---|---|---|
value.first_name |
Equal, Not Equal, In, Not In, Matches, Not Matches | 예 |
value.last_name |
Equal, Not Equal, In, Not In, Matches, Not Matches | 예 |
list.groups |
In, Not In, Is Empty, Is Not Empty | 아니요 |
선택자 사용에 대한 더 많은 예제는 binding-rule 문서를 참고해요.
클레임 명세 및 JSON Pointer
ClaimMappings 및 ListClaimMappings 필드를 사용해 JWT 내부의 데이터를 가리켜요. 원하는 키가 JWT의 최상위 수준에 있다면 이름을 직접 제공할 수 있어요. 더 낮은 수준에 중첩되어 있다면 JSON Pointer를 사용할 수 있어요.
이 예제는 디코딩된 JWT 클레임을 보여줘요.
"division": "North America",
"groups": {
"primary": "Engineering",
"secondary": "Software"
},
"iss": "https://my-corp-app-name.auth0.com/",
"sub": "auth0|eiw7OWoh5ieSh7ieyahC3ief0uyuraphaengae9d",
"aud": "V1RPi2MYptMV1RPi2MYptMV1RPi2MYpt",
"iat": 1589224148,
"exp": 1589260148,
"nonce": "eKiihooH3Fah8Ieshah4leeti6ien3"
}
다음 구문을 사용해 데이터를 참조해요:
- 최상위 키: 직접 참조를 사용해요. 예를 들어
"division"은"North America"를 나타내요. - 중첩 키: JSON Pointer 구문을 사용해요. 예를 들어
"/groups/primary"는"Engineering"을 나타내요.
어떤 유효한 JSON Pointer든 선택자로 사용할 수 있어요. 구문에 대한 전체 설명은 JSON Pointer RFC를 참고해요.