서버 구성에서 JWT 빌더 요소를 구성하고 애플리케이션에서
com.ibm.websphere.security.jwt.JwtBuilder 및
com.ibm.websphere.security.jwt.JwtToken API를 구현하여
JWT(JSON Web Token) 토큰을 프로그래밍 방식으로 빌드할 수 있습니다.
이 태스크 정보
JWT API에 대한 정보는 ${wlp.install.dir}/dev 디렉토리의
제품에 포함된 JWT(JSON Web Token) Java 문서 또는 API 문서를 참조하십시오.
프로시저
JWT 토큰 생성 엔드포인트에서 JWT 토큰을 얻으십시오. - 프로그래밍 없이 jwt-1.0 기능에서 엔드포인트가 있는 토큰을 얻으십시오.
- 신임 정보를 요청에 포함하지 않은 경우 https://<host>:<port>/jwt/api/ibm/<configId>/token에서
엔드포인트에 액세스하려면 신임 정보를 인증하십시오. 인증에 성공한 후 MP-JWT 형식 토큰이 JSON 양식으로 리턴됩니다. 토큰은 서버의 사용자 레지스트리에 기록되어 있는 사용자 및 사용자 그룹을 포함합니다.
- <configId> ID를 가진 server.xml 파일에 있는 JWTBuilder 요소의 속성에서 발행자와 만기 시간과 같은 다른 토큰 속성을 설정하십시오.
- server.xml 파일에서 JWTBuilder 요소를 정의하지 않은 경우 defaultJWT를 <configId> ID로 사용하십시오. jwtBuilder - JWT 빌더(jwtBuilder)에서 사용 가능한 JWT 빌더 구성 속성을 찾으십시오.
- JSON Web Token을 Liberty 프로그래밍 방식으로 빌드하십시오.
- server.xml 파일에서 jwt-1.0 기능을 추가하십시오.
<featureManager>
<feature>jwt-1.0</feature>
...
</featureManager>
- 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
- 애플리케이션에서 com.ibm.websphere.security.jwt.JwtBuilder 및
com.ibm.websphere.security.jwt.JwtToken API를 구현하여
JWT 토큰을 프로그래밍 방식으로 빌드하십시오.
자세한 정보는 JWT(JSON Web Token) Java 문서를 참조하십시오.
- 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");
- 토큰에서 청구를 수정하십시오.
- 청구를 추가하거나 업데이트하십시오. 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");
- 구성된 서명 알고리즘 및 서명 키를 수정하십시오.
jwtBuilder.signWith("new_algorithm", new_key);
- 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,
goToken의
newToken JWT를
빌드합니다.
JwtToken newToken = JwtBuilder.create().claim(Claims.AUDIENCE, "https://acme.com/rs").claimFrom(goToken, "sub").claim(goToken, "uid").claim(goToken, "scope").buildJwt();