[16.0.0.4 이상]

Liberty에서 JSON 웹 토큰 빌드

서버 구성에서 JWT 빌더 요소를 구성하고 애플리케이션에서 com.ibm.websphere.security.jwt.JwtBuildercom.ibm.websphere.security.jwt.JwtToken API를 구현하여 JSON 웹 토큰(JWT) 토큰을 프로그래밍 방식으로 빌드할 수 있습니다.

이 태스크 정보

JWT API에 대한 정보는 ${wlp.install.dir}/dev 디렉토리의 제품에 포함된 JSON 웹 토큰 Java 문서 또는 API 문서를 참조하십시오.

프로시저

  1. server.xml 파일에서 jwt-1.0 기능을 추가하십시오.
    <featureManager>
        <feature>jwt-1.0</feature>
        ...
    </featureManager>
  2. jwtBuilder 요소를 수정하여 JWT 빌더를 구성하십시오.

    구성할 수 있는 jwtBuilder 속성에 대한 정보는 JWT 빌더 (jwtBuilder)의 내용을 참조하십시오.

    jwt-1.0 기능을 추가하고 변경사항을 저장하면 Liberty가 다음 기본 jwtBuilder 요소를 추가합니다.
    <jwtBuilder id="defaultJWT">
    </jwtBuilder>
    이 기본 구성에서 다음 값이 가정됩니다.
    • exp 청구는 토큰 작성 시간의 2시간 이후입니다. expiry 속성에서 이 값을 구성할 수 있습니다.
    • iss 청구는 https://<host_name>:<ssl_port>/jwt/defaultJWT로 설정됩니다. issuer 속성에서 발행자를 구성하십시오.
    • JWT는 서버의 기본 키 저장소에서 기본 키가 있는 RS256 알고리즘을 사용하여 서명됩니다. 이 구성은 서버에 대해 기본 키 저장소가 구성되었고 기본 키 저장소가 단일 개인 키를 포함하고 서명을 위해 개인 키를 사용할 수 있다고 가정합니다. keyStoreRef 속성에서 다른 키 저장소를 지정하는 경우 지정된 키 저장소의 개인 키가 사용됩니다. keyAlias 속성이 구성되어 있지 않고 키 저장소가 하나의 개인 키만 포함하는 경우 해당 개인 키는 서명에서 사용됩니다.

    이 기본 jwtBuilder 요소를 재구성하거나 하나 이상의 기타 jwtBuilder 요소를 작성할 수 있습니다. 각 jwtBuilder 요소에는 id 속성으로 지정된 고유한 URL-안전 문자열이 있어야 합니다. ID가 누락된 경우 jwtBuilder가 처리되지 않습니다.

    JWT 토큰이 RS256 알고리즘을 사용하여 서명되는 경우 jwkEnabled="true"를 설정하여 JSON 웹 키(JWK)로 JWT 토큰을 서명하도록 JWT 빌더를 구성할 수 있습니다. JWK가 사용 가능한 경우 JWT 빌더는 키 쌍을 동적으로 생성하며 개인 키로 JWT 토큰을 서명합니다. 서명을 유효성 검증하기 위해 JWT 이용자는 다음 형식이 있는 JWK API에서 키를 검색할 수 있습니다.
    https://<host_name>:<ssl_port>/jwt/ibm/api/<jwtBuilder_configuration_id>/jwk
  3. 애플리케이션에서 com.ibm.websphere.security.jwt.JwtBuildercom.ibm.websphere.security.jwt.JwtToken API를 구현하여 JWT 토큰을 프로그래밍 방식으로 빌드하십시오.

    자세한 정보는 JSON 웹 토큰 Java 문서를 참조하십시오.

    1. JwtBuilder 오브젝트를 작성하십시오.
      구성 ID를 지정하지 않는 경우 오브젝트는 기본 jwtBuilder 구성과 관련됩니다.
      com.ibm.websphere.security.jwt.JwtBuilder jwtBuilder = JwtBuilder.create();
      구성 ID를 지정하는 경우 오브젝트는 지정된 ID가 있는 jwtBuilder 구성과 관련됩니다.
      com.ibm.websphere.security.jwt.JwtBuilder jwtBuilder = JwtBuilder.create("jwtBuilder_configuration_id");
    2. 토큰에서 청구를 수정하십시오.
      • 청구를 추가하거나 업데이트하십시오. jwtBuilder.claim("claim_name", "claim_value");
        jwtBuilder.claim("role", "monitor");
      • 청구를 삭제하십시오. jwtBuilder.remove("claim_name");
        jwtBuilder.remove("role");
      • Liberty 연합 사용자 레지스트리에서 청구를 페치하십시오. jwtBuilder.fetch("attribute_name");

        이 페치 호출은 JwtBuilder 오브젝트에 JWT의 sub 청구에서 식별된 사용자 이름에 대한 연합 사용자 레지스트리를 검색하도록 알립니다. JwtBuilder 오브젝트는 지정된 속성의 값을 페치하고 해당 속성을 기반으로 새 청구를 작성합니다. 새 청구의 이름은 속성 이름으로 설정되며 새 청구의 값은 속성 값으로 설정됩니다.

      • 기존 JWT 또는 JSON 오브젝트에서 청구를 복사하십시오. jwtBuilder.claimFrom(JSON_or_JWT, "claim_name");
    3. 구성된 서명 알고리즘 및 서명 키를 수정하십시오.
      jwtBuilder.signWith("new_algorithm", new_key);
    4. com.ibm.websphere.security.jwt.JwtToken API를 사용하여 토큰을 빌드하십시오.
      JwtToken jwtToken = jwtBuilder.buildJwt();
      String jwtTokenString = jwtToken.compact();

JSON 웹 토큰 API 예제

다음 예제는 새 JWT를 작성합니다.
JwtBuilder jwtBuilder = JwtBuilder.create();
jwtBuilder.subject("tom@op.com").claim(Claims.AUDIENCE, "https://acme.com/rs").claim("iss","https://sso.com/ibm/op" ).claim("scope", "impersonator monitor").claim("uid", "hasys123haksiqws");
JwtToken goToken = jwtBuilder.buildJwt();
결과 JWT는 서버의 기본 개인 키로 서명되며 다음 청구를 포함합니다.
{
"aud": "https://acme.com/rs",
"iss": "https://sso.com/ibm/op",
"iat": 1388440863, "exp": 1388444763,
"uid": "hasys123haksiqws",
"sub": "tom@op.com",
"scope": "impersonator monitor"
}
다음 예제는 다른 JWT, goTokennewToken JWT를 빌드합니다.
JwtToken newToken = JwtBuilder.create().claim(Claims.AUDIENCE, "https://acme.com/rs").claimFrom(goToken, "sub").claim(goToken, "uid").claim(goToken, "scope").buildJwt();

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



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