이 엔드-투-엔드 예제는 Liberty의 설치부터 OpenID Connect의 구성을 통해 안내하므로
Liberty에서 OpenID Connect(OIDC)의 구성에 익숙해지도록 도와줍니다. 결과로 클라이언트 애플리케이션은 OpenID Connect Provider의
인증에 의해 사용자의 ID를 확인할 수 있습니다.
이 태스크 정보
다음 프로시저의 단계를 완료하여 OpenID Connect Provider와 OpenID Connect Relying Party를 설정할 수 있습니다.
- Liberty를 설치하십시오.
- 두 개의 서버를 작성하십시오.
- Snoop 서블릿을 포함하는 IBM® 제공 테스트 애플리케이션을 다운로드하고 설치하십시오.
- 로컬 호스트의 호스트 이름을 사용하여 서로 통신하도록 OpenID Connect Provider 및 OpenID Connect Relying Party를 구성하십시오.
- 로그인하십시오.
- 실제 호스트 이름을 사용하도록 OpenID Connect Provider 및 OpenID Connect Relying Party 구성을 편집하십시오.
- 로그인하십시오.
프로시저에서 발생하는 사항은 다음과 같습니다.
- OpenID Connect Relying Party 서버와 OpenID Connect Provider 서버는 동일한 시스템에서 실행됩니다.
- OpenID Connect Relying Party 서버와 OpenID Connect Provider 서버는 로컬 호스트
호스트 이름으로 시작합니다. 이들은 시스템에서 자신에 대한 외부 연결을 허용하는 호스트에 대해
겪을 수 있는 문제를 극복하기 위해 이를 수행합니다.
- 파일 기반 레지스트리는 OpenID Connect Provider 서버에 대해
server.xml 파일에서 하드코드됩니다. 여기에는 사용자 이름과 비밀번호에 대한 두 항목이 포함됩니다. 하나는
Jackson 사용자 이름 및 Password 비밀번호에 대한 것입니다. 다른 하나는
Andrea 사용자 이름 및 Password 비밀번호에 대한 것입니다. 예를 들어,
프로덕션 환경에서는 사용자가 OpenID Connect Provider에 대해 인증하므로 대신 LDAP 사용자 레지스트리를
사용할 수 있습니다. 레지스트리를 가지려면 OpenID Connect Provider가 필요합니다. OpenID
Connect Relying Party는 OpenID Connect Provider에서 가져오는 사용자 아티팩트(예: 토큰)를
신뢰하므로 레지스트리가 필요하지 않습니다.
- 기본 키 저장소는 일반 텍스트 비밀번호를 사용합니다. securityUtility 명령을 사용하여 인코딩되고 암호화된 비밀번호를 생성할 수 있습니다.
- 단순성을 위해 HS256 서명 알고리즘이 사용됩니다. HS256 서명 알고리즘에 대한 지원은 OpenID Connect 스펙에서
필수가 아닙니다. 많은 OpenID 제공자가 HS256 서명 알고리즘을 지원하지 않습니다.
- 편의를 위해 테스트 애플리케이션을 dropins 디렉토리에 넣지만
프로덕션 환경에서는 그렇게 하지 않는 것이 좋습니다.
- OIDC 추적이 사용으로 설정되므로 오류가 발생하는 경우 서버의 trace.log 파일에서 볼 수 있습니다.
프로시저
- WebSphere® Liberty를 설치하십시오.
- WebSphere Liberty
.zip 파일을 WASdev에서
설치할 새 디렉토리로 다운로드하십시오.
- 다운로드된 파일의 압축을 푸십시오.
unzip wlp-webProfile7-17.0.0.4.zip
이 예제에서 따른 모든 경로는 설치를 위해 작성한 디렉토리에 상대적입니다.
- 샘플 Liberty 기본 애플리케이션을 다운로드하십시오.
이 기본 애플리케이션은 libertyDefaultApplication.ear 파일에 있으며 이 예제 프로시저에서 사용하는 Snoop 서블릿을 포함합니다.
- Liberty OpenID Connect 클라이언트 및 Liberty OpenID Connect 제공자 기능을 설치하십시오.
wlp/bin 디렉토리에서 다음 명령을 실행하십시오.
installUtility install openidConnectClient-1.0
installUtility install openidConnectServer-1.0
- Liberty 서버를 작성하십시오.
- OpenID Connect Relying Party 서버를 작성하십시오.
wlp/bin 디렉토리에서 다음 명령을 실행하십시오.
server create Liberty_RP
- OpenID Connect 제공자 서버를 작성하십시오.
wlp/bin 디렉토리에서 다음 명령을 실행하십시오.
server create Liberty_OP
- OpenID Connect Relying Party 서버에 대해 server.xml 파일을 작성하십시오.
- wlp/usr/servers/Liberty_RP 디렉토리로 변경하십시오.
- server.xml 파일의 컨텐츠를 다음 컨텐츠로 대체하십시오.
<server description="Liberty_RP">
<featureManager>
<feature>openidConnectClient-1.0</feature>
<feature>appSecurity-2.0</feature>
</featureManager>
<!-- To access this server from anything other than localhost or the loopback address, add a host attribute to the following element, e.g. host="*" -->
<httpEndpoint httpPort="9081" httpsPort="9444" id="defaultHttpEndpoint"/>
<keyStore id="defaultKeyStore" password="Password"></keyStore>
<openidConnectClient id="RP"
clientId="oidcclient"
clientSecret="password"
authorizationEndpointUrl="https://localhost:9443/oidc/endpoint/OP/authorize"
tokenEndpointUrl="https://localhost:9443/oidc/endpoint/OP/token" >
</openidConnectClient>
<logging traceSpecification="*=info:
com.ibm.ws.security.*=all:com.ibm.ws.webcontainer.security.*=all:com.ibm.oauth.*=all:com.ibm.wsspi.security.oauth20.*=all:com.ibm.ws.transport.http.*=all:org.apache.http.cli.e.nt.*=all" traceFileName="trace.log" maxFileSize="20" maxFiles="10" traceFormat="BASIC" />
</server>
- OpenID Connect 제공자에 대해 server.xml 파일을 작성하십시오.
- wlp/usr/servers/Liberty_OP 디렉토리로 변경하십시오.
- server.xml 파일의 컨텐츠를 다음 컨텐츠로 대체하십시오.
<server description="Liberty_OP">
<featureManager>
<feature>openidConnectServer-1.0</feature>
<feature>appSecurity-2.0</feature>
</featureManager>
<!-- To access this server from anything other than localhost or the loopback address, add a host attribute to the following element, e.g. host="*" -->
<httpEndpoint httpPort="9080" httpsPort="9443" id="defaultHttpEndpoint"/>
<keyStore id="defaultKeyStore" password="Password"/>
<basicRegistry>
<user name="Jackson" password="Password"/>
<user name="Andrea" password="Password"/>
</basicRegistry>
<openidConnectProvider id="OP" oauthProviderRef="oauth"/>
<oauthProvider id="oauth">
<localStore>
<!-- The default redirect URL pattern is: https://<hostname>:<sslport>/oidcclient/redirect/<openidConnectClientID> -->
<client name="oidcclient" secret="password" scope="openid" redirect="https://localhost:9444/oidcclient/redirect/RP" />
</localStore>
</oauthProvider>
<!-- To grant all authenticated users access to the OIDC protected resource, grant them the oauth-role authenticated -->
<oauth-roles>
<authenticated>
<special-subject type="ALL_AUTHENTICATED_USERS"/>
</authenticated>
</oauth-roles>
<logging traceSpecification="*=info:
com.ibm.ws.security.*=all:com.ibm.ws.webcontainer.security.*=all:com.ibm.oauth.*=all:com.ibm.wsspi.security.oauth20.*=all:com.ibm.ws.transport.http.*=all:org.apache.http.client.*=all" traceFileName="trace.log" maxFileSize="20" maxFiles="10" traceFormat="BASIC" />
</server>
- 기본 키 저장소와 키를 작성하십시오.
wlp/bin 디렉토리에서 다음 명령을 실행하십시오.
server start Liberty_RP
server stop Liberty_RP
server start Liberty_OP
server stop Liberty_OP
- 신뢰할 수 있는 인증서로서 Liberty_OP 서버를 위한 서명자 인증서를 Liberty_RP 서버에 추가하십시오.
- Liberty_OP 서버의 키 저장소에서 개인 인증서를 보내십시오.
- 디렉토리를 wlp/usr/servers/Liberty_OP/resources/security로
변경하십시오.
- Liberty_OP 서버의 기본 개인 인증서를 내보내십시오.
keytool -exportcert -keystore key.jks -storepass Password -alias default -file libertyOP.cer
Liberty_OP 서버를 위한 이 기본 개인 인증서는 서명자 인증서입니다.
- Liberty_OP 서버에서 Liberty_RP 서버의 키 저장소로 서명자 인증서를 가져오십시오.
- libertyOP.cer 파일을 wlp/usr/servers/Liberty_RP/resources/security
디렉토리로 복사하십시오.
- 디렉토리를 wlp/usr/servers/Liberty_RP/resources/security로
변경하십시오.
- 다음 명령을 실행하여 가져오십시오.
keytool -importcert -keystore key.jks -storepass Password -alias libertyop -file libertyOP.cer -noprompt
- 옵션: Liberty_RP 서버의 키 저장소를 확인하십시오.
keytool -list -v -keystore key.jks -storepass Password
- Liberty 기본 애플리케이션을 Liberty_RP 서버에 설치하십시오.
이전 단계에서 다운로드한 libertyDefaultApplication.ear 파일을
wlp/usr/servers/Liberty_RP/dropins 디렉토리에 복사하십시오.
- Liberty_OP 서버 및 Liberty_RP 서버를 시작하십시오.
wlp/bin 디렉토리에서 다음 명령을 실행하십시오.
server start Liberty_RP
server start Liberty_OP
- Liberty_RP 서버의 로그인 페이지를 여십시오.
- 브라우저의 주소 표시줄에서, Liberty_RP 서버의 URL을 입력하십시오.
http://localhost:9081/snoop
- Enter를 누르십시오.
로그인 창이 표시됩니다.
중요사항: 브라우저에서 연결이 보안되지 않는다는 경고가 표시되면 연결을 허용하도록 브라우저에서 다음 단계를 수행하십시오.
- Liberty_OP 서버에 로그인하고 Liberty_RP 서버에 권한을 부여하십시오.
- Liberty_OP 서버에 사용자를 인증하십시오.
- 사용자 이름 Jackson과 비밀번호 Password로 로그인하십시오.
- 로그인을 클릭하십시오.
클라이언트가 다음 데이터에 액세스할 수 있게 허용 페이지가
openid 항목이 선택되어 표시됩니다.
- Liberty_RP 서버가 사용자의 개인 정보에 액세스할 수 있도록 Liberty_OP 서버에 권한을 부여하십시오.
한 번 허용 또는 허용, 내 의사결정 기억을 클릭하십시오.
중요사항: 브라우저에서 연결이 보안되지 않는다는 경고가 표시되면 연결을 허용하도록 브라우저에서 다음 단계를 수행하십시오. Liberty_RP 서버와
Liberty_OP 서버 둘 다의 httpEndpoint 요소에서 사용된 키 저장소는 자체 서명 인증서만 포함하므로 이 경고를 수신할 수 있습니다.
성공적으로 로그인하면 Snoop 서블릿 - 요청/클라이언트 정보 페이지에
Snoop 서블릿이 표시됩니다. 중요사항: 다시 로그인하려면 다음 옵션 중 하나 이상을 완료하십시오.
- 다른 브라우저 제품에서 로그인하십시오.
- 현재 브라우저에서 쿠키를 지우고 로그인에 대한 이전 단계를 수행하십시오.
- 로그인하는 데 사용한 모든 브라우저 창을 닫고 브라우저를 다시 연 후 로그인하십시오.
- Liberty_RP 서버를 다시 시작한 후 로그인에 대한 이전 단계를 수행하십시오.
- 서버 이름을 완전히 규정하십시오.
- Liberty_RP 서버의 server.xml 파일에서 로컬 호스트 호스트 이름을 완전한 이름으로 변경하십시오.
- wlp/usr/servers/Liberty_RP/server.xml 파일을 편집하십시오.
- host="*" 속성을 httpEndpoint 요소에 추가하십시오.
- 로컬 호스트 호스트 이름 대신 서버 호스트 이름을 사용하도록 openidConnectClient 요소의
authorizationEndpointUrl 및 tokenEndpointUrl 속성을 변경하십시오.
다음 예제 코드는 완전한 서버 호스트 이름을 지정합니다.
<openidConnectClient id="RP"
clientId="oidcclient"
clientSecret="password"
authorizationEndpointUrl="https://wks1.acme.com:9443/oidc/endpoint/OP/authorize"
tokenEndpointUrl="https://wks1.acme.com:9443/oidc/endpoint/OP/token" >
</openidConnectClient>
- 파일을 저장합니다.
파일을 저장할 때 Liberty 구성 변경이 트리거되므로 서버를 다시 시작할 필요가 없습니다.
- Liberty_OP 서버의 server.xml 파일에서 로컬 호스트 호스트 이름을 완전한 이름으로 변경하십시오.
- wlp/usr/servers/Liberty_OP/server.xml 파일을 편집하십시오.
- host="*" 속성을 httpEndpoint 요소에 추가하십시오.
- 로컬 호스트 호스트 이름 대신 완전한 서버 호스트 이름을 사용하도록 클라이언트 요소(oauthProvider/localStore/client)의
경로 재지정 속성을 변경하십시오.
다음 예제 코드는 완전한 서버 호스트 이름을 지정합니다.
<client name="oidcclient" secret="password" scope="openid" redirect="https://wks1.acme.com:9444/oidcclient/redirect/RP" />
- 파일을 저장합니다.
파일을 저장할 때 Liberty 구성 변경이 트리거되므로 서버를 다시 시작할 필요가 없습니다.
- 완전한 호스트 이름을 사용하여 로그인 페이지를 여십시오.
- 브라우저의 주소 표시줄에서 Liberty_RP 서버를 포함하는 URL을
입력하십시오.
http://<host_name>:9081/snoop
- Enter를 누르십시오.
로그인 창이 표시됩니다.
중요사항: 브라우저에서 연결이 보안되지 않는다는 경고가 표시되면 연결을 허용하도록 브라우저에서 다음 단계를 수행하십시오.
- Liberty_OP 서버에 로그인하고 Liberty_RP 서버에 권한을 부여하십시오.
- Liberty_OP 서버에 사용자를 인증하십시오.
- 사용자 이름 Jackson과 비밀번호 Password로 로그인하십시오.
- 로그인을 클릭하십시오.
클라이언트가 다음 데이터에 액세스할 수 있게 허용 페이지가
openid 항목이 선택되어 표시됩니다.
- Liberty_RP 서버가 사용자의 개인 정보에 액세스할 수 있도록 Liberty_OP 서버에 권한을 부여하십시오.
한 번 허용 또는 허용, 내 의사결정 기억을 클릭하십시오.
중요사항: 브라우저에서 연결이 보안되지 않는다는 경고가 표시되면 연결을 허용하도록 브라우저에서 다음 단계를 수행하십시오. Liberty_RP 서버와
Liberty_OP 서버 둘 다의 httpEndpoint 요소에서 사용된 키 저장소는 자체 서명 인증서만 포함하므로 이 경고를 수신할 수 있습니다.
성공적으로 로그인하면 Snoop 서블릿 - 요청/클라이언트 정보 페이지에
Snoop 서블릿이 표시됩니다.
결과
OpenID Connect Relying Party에 의해 보호되는 Snoop 서블릿을 포함하는
Liberty가 있습니다. OpenID Connect Relying Party는 인증을 위해 OpenID Connect Provider를 사용합니다.
표 1. 결과에 대한 질문질문 |
답변 |
Snoop 서블릿과 libertyDefaultApplication 테스트 애플리케이션이 OpenID Connect 구성에서
언급되지 않은 경우에도 테스트 애플리케이션은 왜 OpenID Connect Relying Party에 의해 보호됩니까? |
테스트 애플리케이션은 web.xml 파일에
Java™ EE 보안 사용 컨테이너가
지원한다는 보안 제한조건이 포함되므로 보호됩니다. OpenID Connect Relying Party가 Liberty에서 실행 중인 경우,
기본적으로 Relying Party는 보안 제한조건이 있는 URL에 대한 모든 요청에 권한을 부여하려고 시도합니다. 테스트 애플리케이션에는
사용 중인 URL에 대한 보안 제한조건이 있으므로 Relying Party는 요청에 권한을 부여합니다. |