OpenID Connect 구현 참고 사항

IBM® Verify 보안 모범 사례를 준수하여 OpenID Connect 구현에 대한 보안 개선을 지속적으로 진행하고 있습니다. 이전 버전과의 호환성은 최대한 유지될 예정이지만, 보안을 강화하기 위해 일부 항목을 변경해야 합니다.

OpenID Connect 구현의 변경 사항

  • 일부 오류 메시지는 업데이트될 수 있지만 메시지 ID는 그대로 유지됩니다. 응답 메시지를 읽는 로직이 포함된 프로세스가 있다면, 대신 메시지 ID를 사용하십시오.
  • 인증 코드나 토큰을 얻기 위해 인증 엔드포인트에 요청이 전송되면, 사용자를 로그인 또는 다단계 인증 페이지로 리디렉션할 수 있습니다. 브라우저에서 이 작업을 수행하면 자동으로 몇 차례 리디렉션이 발생합니다. 테스트 자동화가 이 흐름을 기반으로 구축된 경우, 리디렉션도 자동으로 처리되도록 해야 합니다.
  • 범위를 반환하는 엔드포인트의 경우, 범위를 반환하지 않거나 범위에 대해 빈 문자열을 반환하는 것은 동일하게 처리됩니다.
  • JSON 문자열 내의 슬래시(/)는 이스케이프 처리되지 않을 수 있습니다. JSON 파서가 두 가지 모두를 처리할 수 있도록 하십시오.
  • API 권한이 더 이상 사용자의 동의 요청 창에 표시되지 않습니다. 해당 클라이언트를 위해 생성된 토큰에는 여전히 API 권한이 부여됩니다.
  • 이 사양에 따르면, redirect_uri 에서 구문을 http 사용할 수 있는 경우는 가 localhosthostname 이거나 IP 루프백 리터럴인 경우에만 허용됩니다. 참조 3.1.2.1OpenID 코어 1.0: 섹션 연결. 인증 요청.
  • 쿼리 매개변수가 항상 동일한 순서로 나열되는 것은 아닙니다. 쿼리 매개변수를 처리할 때는 적절한 라이브러리를 사용하거나, 순서에 관계없이 매개변수를 찾아낼 수 있는 견고한 regex 메커니즘을 마련하십시오.

OpenID Connect 구현의 향후 변경 사항

다음 항목들에 대해서는 당장 변경할 필요가 없습니다. 그러나 OpenID Connect 구현이 모범 사례를 따르고 향후 변경 사항에도 대비할 수 있도록, 해당 항목을 변경하는 것이 좋습니다.
  • 일반적으로 POST 요청의 경우 쿼리 매개변수 대신 요청 본문에 매개변수를 포함하는 것이 더 안전합니다.
  • nonce 매개변수는 공격자가 추측할 수 없도록 암호학적으로 무작위적인 값이어야 합니다. 길이가 충분히 길고 무작위성이 확보되었는지 확인하십시오. ‘Nonce 구현 참고 사항’을 참조하십시오. 최소 8자 이상을 입력하는 것이 좋습니다.
  • 인증 서버(IBM Verify)는 인증 코드와 길이에 제한이 없는 토큰을 생성하며, 보안상의 이유로 향후 이 정책이 변경될 수 있습니다. 토큰을 저장할 때는 토큰 길이에 최소 1024자 이상의 공간을 확보하십시오. ID 토큰이나 JWT 형식의 액세스 토큰과 같은 JWT 형식의 토큰 길이는 JWT의 내용에 따라 달라집니다. JWT 콘텐츠는 더 많은 속성이 매핑되면 확장됩니다.
  • 베어러 토큰의 토큰 유형은 대소문자를 구분하지 않습니다. 예를 들어 "Bearer"나 "bearer" 모두 가능합니다. 이 값에 대해 대소문자를 구분하는 유효성 검사를 수행하지 마십시오.
  • 리프레시 토큰 흐름이 수행되면, 새로운 ID 토큰에는 원래의 논스가 포함되지 않습니다. 원래 흐름에서 반환된 는 nonce 인증 요청에 대한 재전송 공격을 방지하는 데 사용되며, 리프레시 토큰 흐름에 대한 후속 토큰 요청의 경우 이러한 방지 조치가 필요하지 않습니다.
  • nonce와 마찬가지로, PKCE 코드 검증기는 암호학적으로 무작위적인 값이어야 하며 추측할 수 없어야 합니다. 사양에 따르면 코드 검증기의 길이는 43자 이상이어야 합니다. RFC 7636을 참조하십시오.
  • state 매개변수를 사용하여 검증 가능한, 추측할 수 없는 값으로 설정함으로써 크로스사이트 요청 위조를 방지하십시오. 예를 들어, 사용자 에이전트를 인증하는 데 사용되는 세션 쿠키의 해시를 생성합니다. RFC 6749를 참조하십시오. 최소 8자 이상을 입력하는 것이 좋습니다.
  • 'audience' 값은 aud 문자열이나 배열일 수 있습니다. 특히, 대상에 대한 값이 하나뿐인 경우, 해당 값은 문자열이거나 문자열이 하나 포함된 배열일 수 있습니다.
  • 클라이언트 자격 증명 부여 유형은 기계 간 액세스를 위한 액세스 토큰을 생성하기 위한 것입니다. 이 그랜트 유형이 ID 토큰을 생성하거나 액세스 토큰을 사용하여 엔드포인트에 userinfo 액세스할 수 있다고 기대하지 마십시오.
  • ID 토큰의 (type) 헤더 매개변수는 typ 선택 사항입니다. 의존 당사자는 ID 토큰에 헤더 매개변수가 typ 포함되어 있을 것으로 기대해서는 안 됩니다.