2016-09-09 3 views
0

JWS (JWT) 헤더가있는 JWKS 키 저장소에서 서명 확인 키를 선택하는 표준 방법이 있습니까?JWT 헤더가있는 JWKS에서 키 선택

목표는 OpenID Connect ID 토큰 유효성 검사 라이브러리를 구현하는 것입니다. 유연한 계획을 세우려하고 있지만 다른 구성을 예상하고 있지만 키 선택이 IdP에만 관련된 것이라면 요점이 있는지 확실하지 않습니다.

내 현재의 알고리즘은 JWKS 안내 및 필터링 : JWK가있는 경우 동일하지 "SIG"

  • JWK가있는 경우 "key_ops"필드가있는 경우 거부 않습니다 "사용"거부 할 경우

    1. 필드를 "사용" "key_ops는"JWK 그것이 JWS 헤더 값과 다른 경우 "ALG"필드가 JWK하지 않는 또는 (주 다른 값이있는 경우
    2. JWS 헤더는 "아이"필드가있는 경우 거부 거부 할 경우
    3. 를 "확인"이 포함되어 있지 않습니다 역 논리)
    4. 이 단계에서 정확히 하나의 JWK가 남아 있다면 그 중 하나를 사용합니다. 그렇지 않으면 실패입니다.

    이 방법이 "충분히 표준"입니까?

    === 내가 오픈 ID를 연결 핵심 사양 말의 Section 10.1이 있음을 발견

    편집 === :

    RSA 또는 ECDSA 서명, 호세 헤더의 ALG 헤더 매개 변수 값을 사용하여

    JSON Web Algorithms [JWA]에 정의 된대로 적절한 알고리즘으로 설정되어야합니다. 콘텐츠에 서명하는 데 사용되는 개인 키는 발신자가 JWK Set 문서에 발행 한 서명 확인에 사용 된 공개 키와 연결되어야합니다 (MUST). 참조 된 JWK Set 문서에 여러 개의 키가있는 경우, JOSE Header에 아이 값을 제공해야합니다 (MUST). 각 키의 주요 용도는 서명을 지원해야합니다 (MUST).

    JWK "use"는 필수이므로 "sig"로 안전하게 지정할 수 있습니다.

    JWKS에 키가 둘 이상인 경우 JWT "kid"은 필수 항목입니다. 이는 (간접적으로는 있지만)이 경우 JWT "어린이"와 "JWK"어린이가 일치해야한다고 제안합니다. "꼬마"는 고유 할 필요가 없으므로 추가 규칙이 필요합니다.

  • +0

    4. 아마도 : "JWS 헤더에"kid "필드가 있으면 JWK가 없거나 다른 값을 갖습니다 (역 논리에 유의하십시오)."JWS-> JWK –

    +0

    좋은 점, 건배! – maciekszajna

    답변

    0

    실용적인 접근 방식입니다. 나는 무대 5에서 당신이 kid이 JWS (4 단계)로 옮겨지지 않았다면 같은 유형의 여러 유효한 키들로 끝났다고 주장 할 것입니다. 이 키들을 반복하여 확인 기능에 한 번에 하나씩 전달하여 성공한 키가 있는지 확인하고 메시지에 서명하는 데 사용됩니다.