[16.0.0.3 이상]

OpenID Connect에 대해 JSON 웹 토큰 인증 구성

신뢰할 수 있는 인증 프록시, 신뢰할 수 있는 서비스 클라이언트 또는 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”
	 ]  
}

프로시저

  1. 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>
  2. 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>
  3. 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 통신 사용을 참조하십시오.

  4. JWT 발행자 iss 청구와 일치하도록 openidConnectClient 요소의 issuerIdentifier 속성을 구성하십시오.

    예를 들어, JWT 토큰이 "iss":"https://idp.acme.com:8020/jwt"를 포함하는 경우 issuerIdentifier="https://idp.acme.com:8020/jwt"를 설정하십시오.

  5. 옵션: 사용자 레지스트리를 구성하십시오. 기본적으로 확인된 JWT 청구는 JWT를 사용자에게 맵핑하지 않고 호출자의 인증된 주제를 직접 작성하는 데 사용되므로 사용자 레지스트리가 필요하지 않습니다.

    그러나 openidConnectClient 요소의 mapIdentityToRegistryUser 속성이 true로 설정된 경우 인증 및 권한 부여에 성공하려면 적절한 ID의 사용자 항목이 권한 부여 서버에서 리턴되어야 합니다. 사용자 레지스트리 구성에 대한 자세한 정보는 Liberty에서 사용자 레지스트리 구성을 참조하십시오.

  6. 옵션: 인증 필터에서 설명된 대로 인증 필터를 구성하십시오.

    인증 필터를 구성하는 경우 openidConnectClient 요소의 authFilterRef 속성에서 인증 필터를 참조하십시오.

    openidConnectClient 요소가 authFilterRef 속성으로 구성되지 않은 경우 인증되지 않은 요청 시도가 이 openidConnectClient 요소에 의해 인증됩니다.

  7. 옵션: 다중 openidConnectClient 요소 및 다중 인증 필터를 구성하여 다중 JWT 발행자 또는 인증 프록시 서버로 작업하도록 Liberty 자원 서버를 구성하십시오.

    openidConnectClient 요소는 하나의 JWT 발행자 또는 인증 프록시가 있는 하나의 신뢰 관계를 정의하며 하나의 인증 필터를 참조합니다.

  8. 옵션: 인증 주제에 JWT 청구를 맵핑하기 위해 규칙을 정의하십시오.
    Liberty 자원 서버는 JWT 청구를 사용하여 인증 주제를 작성하며 사용자는 다음 openidConnectClient 요소 속성에서 주제에 JWT 청구를 맵핑하는 방법을 정의할 수 있습니다.
    • userIdentifier
    • userUniqueIdentifier
    • groupIdentifier
    • realmName
    • realmIdentifier
    realmNamerealmIdentifier가 모두 구성되면 realmName이 우선순위를 얻으며 realmIdentifier는 무시됩니다.
    주제에 대한 청구 맵핑을 정의하지 않으면 다음 기본 맵핑 규칙이 적용됩니다.
    • 주제(sub) 청구는 사용자의 고유한 보안 이름 및 프린시펄 이름으로 사용됩니다.
    • 발행자(iss) 청구는 기본 영역이며 주제 영역으로 사용됩니다. realmName 청구가 JWT 토큰에 포함되는 경우 realmName 청구는 iss 청구 대신 주제 영역으로 사용됩니다.
  9. 옵션: 싱글 사인온 쿠키를 구성하십시오. Liberty 서버는 유효한 JWT 토큰을 제공하기 위한 각 요청을 예상하고 인증을 위해 싱글 사인온 쿠키를 작성하거나 사용하지 않습니다. 싱글 사인온 쿠키를 작성하려면 openidConnectClient 요소에서 authnSessionDisabled="false"를 설정하십시오.
  10. 옵션: JWT 토큰을 수신하도록 Liberty 서버를 구성하십시오. 웹 클라이언트는 다음 메소드 중 하나를 사용하여 자원 요청의 JWT 토큰을 Liberty 자원 서버에 전송할 수 있습니다. JWT 토큰이 Authorization 필드 또는 인코딩된 양식 본문 매개변수에서 전송되는 경우 추가 서버 구성이 필요하지 않습니다.
    중요사항: 클라이언트는 토큰 전송을 위해 각 요청에서 둘 이상의 메소드를 사용할 수 없습니다. headerName 속성이 구성되면 Authorization 헤더 필드 또는 인코딩된 양식 본문 매개변수에서 전송된 토큰이 무시됩니다. headerName 속성이 구성되지 않으면 Authorization 헤더가 먼저 검색되고, access_token 매개변수가 그 다음에 옵니다.
    • Authorization 요청 헤더 필드에서 토큰을 전송하십시오.
      GET /resource HTTP/1.1
      Host: server.example.com
      Authorization: Bearer mF_9.B5f-4.1JqM
    • 요청 엔티티 본문의 토큰을 인코딩된 양식 본문 매개변수로 전송하십시오.
      POST /resource HTTP/1.1
      Host: server.example.com
      Content-Type: application/x-www-form-urlencoded
      access_token=mF_9.B5f-4.1JqM
    • Liberty에서 신뢰할 수 있는 헤더 이름을 구성하여 사용자 정의된 요청 헤더 필드의 토큰을 전송하십시오.

      신뢰할 수 있는 헤더 이름을 구성하려면 openidConnectClient 요소에서 headerName="<myJwtHeaderName>"을 설정하십시오. 예를 들어, headerName="jwt"를 설정하는 경우 다음 예제에서 표시된 대로 jwt 헤더 필드의 토큰을 전송할 수 있습니다.
      GET /resource HTTP/1.1
      Host: server.example.com
      jwt: mF_9.B5f-4.1JqM
  11. JWT 대상을 구성하십시오. 신뢰할 수 있는 대상의 목록을 정의하려면 openidConnectClient 요소에서 audiences 속성을 구성하십시오.
    유효한 JWT 토큰은 다음 조건 중 하나를 충족해야 합니다.
    • audiences 속성이 구성되면 대상(aud) 청구 값이 구성된 대상 중 하나여야 합니다. 대상 검사를 무시하려면 audiencesALL_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
  12. 옵션: com.ibm.wsspi.security.oauth.UserCredentialResolver 서비스 프로그래밍 인터페이스(SPI)를 구현하여 JWT 토큰을 주제에 프로그래밍 방식으로 맵핑하십시오.

    인터페이스에 대한 정보는 ${wlp.install.dir}/dev/spi/ibm/ 디렉토리의 제품과 함께 제공된 Java 문서 또는 프로그래밍 인터페이스(API 및 SPI)com.ibm.wsspi.security.oauth.UserCredentialResolver SPI 정보를 참조하십시오.

결과

JWT 토큰을 인증 토큰으로 허용하기 위해 Liberty 서버를 구성하는 데 필요한 최소 구성을 작성했습니다.

주제의 유형을 표시하는 아이콘 태스크 주제



시간소인 아이콘 마지막 업데이트 날짜: Tuesday, 6 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twlp_sec_config_oidc_jwt
파일 이름: twlp_sec_config_oidc_jwt.html