2017-10-31 5 views
0

OIDC 공급자로 인증 할 때 ID 토큰이 반환되고 API에 대해 범위를 지정하면 클라이언트 응용 프로그램이 최종 사용자 대신 보호 된 리소스에 요청할 수 있도록 액세스 토큰이 반환됩니다. 일반적으로 액세스 토큰은 JWT이기도합니다.OIDC - 누군가가 JWT access_token을 스푸핑하는 것을 막으려 고합니다.

하지만 누군가가 이러한 액세스 토큰 중 하나를 스푸핑하지 못하도록 막고이를 만들어 API로 전달하면 어떻게됩니까? 서명이 유효성 검증 로직이 예상하는 것과 다를 수 있기 때문에 수정을 방지하기위한 안전 장치가 있다는 것을 알고 있지만 악의적 인 사용자가 수동으로 새로운 것을 작성한 경우에는 어떻게 될까요? 특히 이러한 토큰은 액세스 토큰이 필요한 API (모든 API가 내성 엔드 포인트를 사용하는 것은 아니며 특히 JWT 사용)에 의해 '적절한 위치에'유효성을 검사 할 수 있기 때문에 특히 그렇습니다. OpenID Connect 제공 업체의 JWT 용 서명 키 주위에 메타 데이터가 있으며 OIDC 발견 문서에서 사용할 수 있다는 것을 알고 있습니다. 예를 들어 여기에 Google's JWK metadata이 있습니다. 공개적으로 사용할 수있는 정보에 서명하고 JWT 액세스 토큰을 OIDC 공급자에게 요청하지 않고도 확인할 수 있다면 JWT는 안전합니까? 어떤 사람이 하나를 생성하여 액세스 토큰이 필요한 API에 무기명 토큰으로 전달하지 못하게하는 것은 무엇입니까?

답변

3

하지만 누군가가 이러한 액세스 토큰 중 하나를 스푸핑하지 못하도록 막고,이를 만들어 API로 전달하면 어떻게됩니까?

원본 JWT에 서명하는 데 사용되는 개인 키 (RS256과 같은 비대칭 서명 알고리즘을 사용한다고 가정 할 때) 없이는 스푸핑 및 재구성이 거의 불가능합니다.

OIDC 검색 문서를 통해 사용할 수있는 JWK 정보에는 공개 키만 포함됩니다.

또한 토큰 스니핑을 피하려면 승인/토큰 교환에 HTTPS를 사용하십시오.

+0

그래서 JWT를 재구성하려면 해당 개인 키를 알아야합니까? –

+0

예. 그거 맞아. JWT의 서명 부분은 개인 키 없이는 재구성 될 수 없으므로 토큰 통신에서 서명이 중요한 역할을합니다. – Karthik