신뢰할 수 있는 인증 프록시, 신뢰할 수 있는 서비스 클라이언트 또는
OAuth 권한 서버에서 인증 토큰으로 JSON 웹 토큰(JWT) 토큰을 허용하도록
Liberty 서버를 구성할 수 있습니다.
이 태스크 정보
인증 토큰으로 JWT 토큰을 허용하도록 Liberty 서버를 구성하려면
openidConnectClient-1.0 기능을 사용으로 설정하고 inboundPropagation="required"를 선정한 후
신뢰 저장소 및 SSL을 구성하십시오. 사용자 레지스트리,
인증 필터, 주제에 대한 청구 맵핑과 같은 추가 JWT 구성을
선택적으로 지정할 수 있습니다. 인증 토큰으로 JWT 사용에 대한 구성은
Liberty에 OpenID Connect 클라이언트 구성에서와 유사합니다.
JWT 토큰이 있는 신뢰할 수 있는 파티는 Liberty에서 연관된 자원에 대한 액세스 권한을 가져오기 위해
해당 토큰을 사용할 수 있습니다. Liberty 자원 서버는 JWT 토큰을 유효성 검증하고
JWT 토큰에서 인증된 주제를 작성합니다. 인증 토큰으로 허용하려면 JWT 토큰이
iss,
sub,
exp 청구를 포함해야 하며
RS256 또는 HS256 알고리즘으로 서명되어야 합니다. 암호화된 JWT는 지원되지 않습니다. 다음 예제는
디코드된 JWT 페이로드를
보여줍니다.
{
"iss":"https://idp.acme.com:8020/jwt",
"sub":"marissa@acme.com",
"exp":1385066178,
"aud":"https://resource.acme.com/services",
"iat":1385062578,
“groupIds”: [
“group1”, “group2”
]
}
- openidConnectClient-1.0 Liberty 기능 및 기타 필요한 기능을
server.xml 파일에 추가하십시오. 최소한
openidConnectClient-1.0 기능에는 ssl-1.0 기능이 필요합니다. server.xml 파일의 featureManager 요소에
다음 요소 선언을 추가하십시오.
<feature>openidConnectClient-1.0</feature>
<feature>ssl-1.0</feature>
- openidConnectClient 요소를 구성하고
inboundPropagation="required"를 설정하십시오. 기타
openidConnectClient 속성에 대한 정보는 OpenID Connect 클라이언트 (openidConnectClient)의 내용을 참조하십시오.
다음 샘플 구성에서는 JWT 토큰 발행자가 JSON 웹 키(JWK)를 지원하고
RS256 알고리즘으로 서명된다고 가정합니다.
<openidConnectClient id="RS" inboundPropagation="required"
jwkEndpointUrl="https://acme.com/jwtserver/jwk" signatureAlgorithm="RS256"
issuerIdentifier="https://idp.acme.com:8020/jwt" >
</openidConnectClient>
- Liberty 서버가 JWK 엔드포인트에 대한 SSL 연결을 작성할 수 있게
JWK 엔드포인트 인증서를 포함하도록 신뢰 저장소를 구성하십시오. 신뢰 저장소는
server.xml 파일의 keyStore 요소에서 구성됩니다. 이 신뢰 저장소를 참조하도록 SSL을 구성한 후에 SSL 구성을
서버 기본 SSL 구성으로 설정하거나 openidConnectClient 요소의
sslRef 속성에서 신뢰 저장소 ID를 지정할 수 있습니다.
JWT 발행자가 JWK를 지원하지 않고 JWT가 X.509 인증서로
대신 서명된 경우 발행자의 X.509 인증서를 신뢰 저장소로
가져오십시오. openidConnectClient 요소의 trustStoreRef 속성에서
신뢰 저장소 ID를 지정하고 trustAliasName 속성에서
인증서를 참조하십시오.
JWT가 HMAC-SHA256 알고리즘이 있는
공유 비밀 키를 사용하여 서명되는 경우 sharedKey 또는
clientSecret 속성에서 공유 비밀 키를 정의하십시오.
신뢰 저장소 또는 키 저장소에 대한 정보는 Liberty에서 SSL 통신 사용을 참조하십시오.
- JWT 발행자 iss 청구와 일치하도록
openidConnectClient 요소의
issuerIdentifier 속성을 구성하십시오.
예를 들어, JWT 토큰이 "iss":"https://idp.acme.com:8020/jwt"를 포함하는 경우
issuerIdentifier="https://idp.acme.com:8020/jwt"를 설정하십시오.
- 옵션: 사용자 레지스트리를 구성하십시오. 기본적으로 확인된 JWT 청구는 JWT를 사용자에게 맵핑하지 않고
호출자의 인증된 주제를 직접 작성하는 데 사용되므로 사용자 레지스트리가 필요하지 않습니다.
그러나 openidConnectClient 요소의
mapIdentityToRegistryUser 속성이
true로 설정된 경우 인증 및 권한 부여에 성공하려면
적절한 ID의 사용자 항목이 권한 부여 서버에서 리턴되어야 합니다. 사용자 레지스트리 구성에 대한 자세한 정보는 Liberty에서 사용자 레지스트리 구성을 참조하십시오.
- 옵션: 인증 필터에서 설명된 대로 인증 필터를 구성하십시오.
인증 필터를 구성하는 경우 openidConnectClient 요소의
authFilterRef 속성에서 인증 필터를 참조하십시오.
openidConnectClient 요소가
authFilterRef 속성으로 구성되지 않은 경우 인증되지 않은 요청 시도가
이 openidConnectClient 요소에 의해 인증됩니다.
- 옵션: 다중 openidConnectClient 요소 및 다중 인증 필터를 구성하여
다중 JWT 발행자 또는 인증 프록시 서버로 작업하도록
Liberty 자원 서버를 구성하십시오.
각 openidConnectClient 요소는 하나의 JWT 발행자 또는 인증 프록시가 있는
하나의 신뢰 관계를 정의하며 하나의 인증 필터를 참조합니다.
- 옵션: 인증 주제에 JWT 청구를 맵핑하기 위해 규칙을 정의하십시오.
Liberty 자원 서버는 JWT 청구를 사용하여 인증 주제를 작성하며 사용자는 다음
openidConnectClient 요소 속성에서 주제에 JWT 청구를 맵핑하는 방법을 정의할 수 있습니다.
- userIdentifier
- userUniqueIdentifier
- groupIdentifier
- realmName
- realmIdentifier
realmName 및
realmIdentifier가 모두 구성되면
realmName이 우선순위를 얻으며
realmIdentifier는 무시됩니다.
주제에 대한 청구 맵핑을 정의하지 않으면 다음 기본 맵핑 규칙이 적용됩니다.
- 주제(sub) 청구는 사용자의 고유한 보안 이름 및
프린시펄 이름으로 사용됩니다.
- 발행자(iss) 청구는 기본 영역이며 주제 영역으로 사용됩니다. realmName 청구가
JWT 토큰에 포함되는 경우 realmName 청구는
iss 청구 대신 주제 영역으로 사용됩니다.
- 옵션: 싱글 사인온 쿠키를 구성하십시오. Liberty 서버는 유효한 JWT 토큰을 제공하기 위한 각 요청을 예상하고
인증을 위해 싱글 사인온 쿠키를 작성하거나 사용하지 않습니다. 싱글 사인온 쿠키를 작성하려면
openidConnectClient 요소에서 authnSessionDisabled="false"를
설정하십시오.
- 옵션: JWT 토큰을 수신하도록 Liberty 서버를 구성하십시오. 웹 클라이언트는
다음 메소드 중 하나를 사용하여 자원 요청의 JWT 토큰을 Liberty 자원 서버에 전송할 수 있습니다. JWT 토큰이
Authorization 필드 또는 인코딩된 양식 본문 매개변수에서 전송되는 경우
추가 서버 구성이 필요하지 않습니다.
중요사항: 클라이언트는 토큰 전송을 위해 각 요청에서 둘 이상의 메소드를
사용할 수 없습니다. headerName 속성이 구성되면 Authorization 헤더 필드 또는
인코딩된 양식 본문 매개변수에서 전송된 토큰이 무시됩니다. headerName 속성이 구성되지 않으면 Authorization
헤더가 먼저 검색되고, access_token 매개변수가 그 다음에 옵니다.
- JWT 대상을 구성하십시오. 신뢰할 수 있는 대상의 목록을 정의하려면 openidConnectClient 요소에서
audiences 속성을 구성하십시오.
유효한 JWT 토큰은 다음 조건 중 하나를
충족해야 합니다.
- audiences 속성이 구성되면 대상(aud)
청구 값이 구성된 대상 중 하나여야 합니다. 대상 검사를 무시하려면
audiences를 ALL_AUDIENCES로 설정하십시오.
- audiences 속성이 구성되지 않았지만 JWT 토큰이 유효한 URL인
aud 청구를 포함하는 경우 자원 서비스 URL에 접두부로
aud 값이 있어야 합니다.
예를 들어, 자원 URL이
aud 청구 값으로
시작하므로 다음 대상은 유효합니다.
- 대상 청구:
"aud":"https://<server>:<port>/something"
- 자원 URL:
https://<server>:<port>/something/specific
자원 URL이
aud 청구 값으로
시작하지 않으므로 다음 대상이 유효하지 않습니다.
- 대상 청구:
"aud":"https://<server>:<port>/something/specific"
- 자원 URL:
https://<server>:<port>/something
- 옵션: com.ibm.wsspi.security.oauth.UserCredentialResolver
서비스 프로그래밍 인터페이스(SPI)를 구현하여
JWT 토큰을 주제에 프로그래밍 방식으로 맵핑하십시오.
인터페이스에 대한 정보는 ${wlp.install.dir}/dev/spi/ibm/ 디렉토리의
제품과 함께 제공된 Java 문서 또는 프로그래밍 인터페이스(API 및 SPI)의
com.ibm.wsspi.security.oauth.UserCredentialResolver SPI 정보를 참조하십시오.