[16.0.0.4 and later]

Liberty에서 JWT(JSON Web Token) 빌드

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

이 태스크 정보

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

프로시저

  1. [18.0.0.1 and later]JWT 토큰 생성 엔드포인트에서 JWT 토큰을 얻으십시오.
    1. 프로그래밍 없이 jwt-1.0 기능에서 엔드포인트가 있는 토큰을 얻으십시오.
    2. 신임 정보를 요청에 포함하지 않은 경우 https://<host>:<port>/jwt/api/ibm/<configId>/token에서 엔드포인트에 액세스하려면 신임 정보를 인증하십시오. 인증에 성공한 후 MP-JWT 형식 토큰이 JSON 양식으로 리턴됩니다. 토큰은 서버의 사용자 레지스트리에 기록되어 있는 사용자 및 사용자 그룹을 포함합니다.
    3. <configId> ID를 가진 server.xml 파일에 있는 JWTBuilder 요소의 속성에서 발행자와 만기 시간과 같은 다른 토큰 속성을 설정하십시오.
    4. server.xml 파일에서 JWTBuilder 요소를 정의하지 않은 경우 defaultJWT<configId> ID로 사용하십시오. jwtBuilder - JWT 빌더(jwtBuilder)에서 사용 가능한 JWT 빌더 구성 속성을 찾으십시오.
  2. JSON Web Token을 Liberty 프로그래밍 방식으로 빌드하십시오.
  3. server.xml 파일에서 jwt-1.0 기능을 추가하십시오.
    <featureManager>
        <feature>jwt-1.0</feature>
        ...
    </featureManager>
  4. 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
  5. 애플리케이션에서 com.ibm.websphere.security.jwt.JwtBuildercom.ibm.websphere.security.jwt.JwtToken API를 구현하여 JWT 토큰을 프로그래밍 방식으로 빌드하십시오.

    자세한 정보는 JWT(JSON Web Token) 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();

JWT(JSON Web Token) 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();

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

파일 이름: twlp_sec_build_jwt.html