보안 속성 전파를 위한 사용자 정의 Java 직렬화 가능 오브젝트 전파
이 문서는 로그인 모듈로부터 오브젝트를 제목에 추가하는 방법을 설명하고, Java™ 오브젝트가 전파되었는지 확인하기 위해 다른 인프라 고려사항을 설명합니다.
시작하기 전에
이 태스크 정보
프로시저
- 사용자 정의 Java 오브젝트를
사용자 정의 로그인 모듈로부터 제목에 추가하십시오. 각 JAAS(Java Authentication
and Authorization Service) 로그인 모듈에는 2단계의 프로세스가 있습니다. WebSphere® Application
Server는 구성에 있는 각 로그인 모듈에 대해 다음 프로세스를 완료합니다.
- 로그인 메소드
- 이 단계에서는 로그인 구성 콜백이 분석되고, 필요한 경우 새 오브젝트나 신임 정보가 작성됩니다.
- 커미트 메소드
- 이 단계에서는 로그인 중에 작성된 오브젝트나 신임 정보가 제목에 추가됩니다.
사용자 정의 Java 오브젝트가 제목에 추가된 후에 WebSphere Application Server는 오브젝트를 전송 서버에 직렬화하고, 오브젝트를 수신 서버에서 직렬화 해제하고, 오브젝트를 제목 다운스트림으로 다시 추가합니다. 그러나 이 프로세스가 성공적으로 발생하기 위해서는 몇몇 요구사항이 존재합니다. JAAS 프로그래밍 모델에 대한 자세한 정보는 보안: 학습 자원 기사에 제공된 JAAS 정보를 참조하십시오.중요사항: 사용자 정의 로그인 모듈을 WebSphere Application Server의 로그인 인프라에 플러그인할 때마다 코드가 신뢰되는지 확인하십시오. 클래스를 Java 아카이브(JAR) 파일에 함께 놓고 파일을 app_server_root/lib/ext/ 디렉토리에 추가하면 로그인 모듈에는 Java 2 Security AllPermissions 권한이 있습니다. 로그인 모듈 및 기타 인프라 클래스를 개인용 디렉토리에 추가하는 것이 좋습니다. 그러나 개인용 디렉토리를 사용하는 경우에는 개인용 디렉토리, JAR(Java archive) 파일 또는 둘 모두에 로그인 모듈로부터 호출되는 API(Application Programming Interface)를 실행하는 데 필요한 권한이 있는지 확인하기 위해 profile_root/properties/server.policy 파일을 수정해야 합니다. 로그인 모듈은 호출 스택에서 애플리케이션 코드 후에 실행될 수도 있으므로 애플리케이션에 추가 특성을 추가할 필요가 없도록 doPrivileged 코드를 추가할 수도 있습니다.
중요사항: 사용자 정의 로그인 모듈을 WebSphere Application Server의 로그인 인프라에 플러그인할 때마다 코드가 신뢰되는지 확인하십시오. 로그인 모듈을 profile_root/classes 디렉토리에 추가하면 로그인 모듈에는 Java 2 Security AllPermissions 권한이 있습니다. 자세한 정보는 사용자 정의 클래스를 위해 프로파일에 클래스 서브디렉토리 작성의 내용을 참조하십시오. 그러나 로그인 모듈은 호출 스택에서 애플리케이션 코드 후에 실행될 수도 있으므로 애플리케이션에 추가 특성을 추가할 필요가 없도록 doPrivileged 코드를 추가할 수도 있습니다.
다음 코드 샘플은 doPrivileged 코드를 추가하는 방법을 보여줍니다.초기화, 로그인 및 커미트 동안 수행할 작업에 대한 자세한 정보는 JAAS를 위한 시스템 로그인 구성을 위한 사용자 정의 로그인 모듈 개발의 내용을 참조하십시오.public customLoginModule() { public void initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, Map options) { } public boolean login() throws LoginException { // Construct callback for the WSTokenHolderCallback so that you // can determine if // your custom object has propagated Callback callbacks[] = new Callback[1]; callbacks[0] = new WSTokenHolderCallback("Authz Token List: "); try { _callbackHandler.handle(callbacks); } catch (Exception e) { throw new LoginException (e.getLocalizedMessage()); } // Checks to see if any information is propagated into this login List authzTokenList = ((WSTokenHolderCallback) callbacks[1]). getTokenHolderList(); if (authzTokenList != null) { for (int i = 0; i< authzTokenList.size(); i++) { TokenHolder tokenHolder = (TokenHolder)authzTokenList.get(i); // Look for your custom object. Make sure you use // "startsWith"because there is some data appended // to the end of the name indicating in which Subject // Set it belongs. Example from getName(): // "com.acme.CustomObject (1)". The class name is // generated at the sending side by calling the // object.getClass().getName() method. If this object // is deserialized by WebSphere Application Server, // then return it and you do not need to add it here. // Otherwise, you can add it below. // Note: If your class appears in this list and does // not use custom serialization (for example, an // implementation of the Token interface described in // the Propagation Token Framework), then WebSphere // Application Server automatically deserializes the // Java object for you. You might just return here if // it is found in the list. if (tokenHolder.getName().startsWith("com.acme.CustomObject")) return true; } } // If you get to this point, then your custom object has not propagated myCustomObject = new com.acme.CustomObject(); myCustomObject.put("mykey", "mydata"); } public boolean commit() throws LoginException { try { // Assigns a reference to a final variable so it can be used in // the doPrivileged block final com.acme.CustomObject myCustomObjectFinal = myCustomObject; // Prevents your applications from needing a JAAS getPrivateCredential // permission. java.security.AccessController.doPrivileged(new java.security. PrivilegedExceptionAction() { public Object run() throws java.lang.Exception { // Try not to add a null object to the Subject or an object // that already exists. if (myCustomObjectFinal != null && !subject.getPrivateCredentials(). contains(myCustomObjectFinal)) { // This call requires a special Java 2 Security permission, // see the JAAS application programming interface (API) // documentation. subject.getPrivateCredentials().add(myCustomObjectFinal); } return null; } }); } catch (java.security.PrivilegedActionException e) { // Wraps the exception in a WSLoginFailedException java.lang.Throwable myException = e.getException(); throw new WSLoginFailedException (myException.getMessage(), myException); } } // Defines your login module variables com.acme.CustomObject myCustomObject = null; }
- 사용자 정의 Java 클래스가
java.io.Serializable 인터페이스를 구현하는지 확인하십시오. 제목에 추가된 오브젝트는 오브젝트를 전파하려면 직렬화되어야 합니다.
예를 들어, 오브젝트는 java.io.Serializable
인터페이스를 구현해야 합니다. 오브젝트가 직렬화되지 않으면 요청은 실패하지 않지만 오브젝트는 전파되지 않습니다.
제목에 추가되는 오브젝트가 전파되게 하려면 보안 속성 전파에 정의된
토큰 인터페이스 중 하나를 구현하거나 다음 기존 기본 토큰 구현 중 하나에 속성을 추가하십시오.
- AuthorizationToken
- 사용자 특정인 경우에는 속성을 추가하십시오. 자세한 정보는 보안 속성을 전파하기 위해 기본 권한 부여 토큰 사용의 내용을 참조하십시오.
- PropagationToken
- 호출 특정인 속성을 추가하십시오. 자세한 정보는 보안 속성을 전파하기 위해 기본 전파 토큰 사용의 내용을 참조하십시오.
사용자 정의 오브젝트를 추가하는 데 주의하고 WebSphere Application Server가 각 홉에서 오브젝트를 직렬화하고 직렬화 해제하는지 확인하기 위해 모든 단계를 수행하는 경우에는 사용자 정의 Java 오브젝트만을 사용하는 것이 충분합니다.
- 사용자 정의 Java 클래스가
요청을 받을 수도 있는 모든 시스템에 존재하는지 확인하십시오.
사용자 정의 오브젝트를 제목에 추가하고 WebSphere Application Server가 제목을 전파할 것으로 예상되면, 클래스 정의를 Java 아카이브(JAR) 파일에 함께 놓고 파일을 직렬화 또는 직렬화 해제가 발생할 수 있는 모든 노드에서 app_server_root/lib/ext/ 디렉토리에 추가하십시오. 또한, Java 클래스 버전이 동일한지 확인하십시오.
사용자 정의 오브젝트를 제목에 추가하고 WebSphere Application Server가 오브젝트를 전파할 것으로 예상되면, 해당 사용자 정의 오브젝트의 클래스 정의가 직렬화 또는 직렬화 해제가 발생할 수 있는 모든 노드에서 profile_root/classes 디렉토리에 있는지 확인하십시오. 또한, Java 클래스 버전이 동일한지 확인하십시오.
- 사용자 정의 로그인 모듈이 로그인 중에 사용자 정의 오브젝트를 추가해야 하는 환경에 사용되는 모든 로그인 구성에서 구성되어 있는지 확인하십시오. WebSphere Application Server와 상호작용하는 모든 로그인 구성은 EJB(Enterprise JavaBeans) 요청을 위해 아웃바운드로 전파될 수도 있는 제목을 생성합니다. WebSphere Application Server가 모든 경우에 사용자 정의 오브젝트를 전파하기를 원하는 경우에는 사용자 정의 로그인 모듈이 환경에 사용된 모든 로그인 구성에 추가되었는지 확인하십시오. 자세한 정보는 JAAS를 위한 시스템 로그인 구성을 위한 사용자 정의 로그인 모듈 개발의 내용을 참조하십시오.
- 전파된 정보를 수신하는 모든 다운스트림 서버에서 보안 속성 전파가 사용 가능으로 설정되었는지 확인하십시오. EJB 요청이 다운스트림 서버로 전송되고 보안 속성 전파가 해당 서버에서 사용 안함으로 설정되는 경우에는 인증 토큰만이 이전 버전과의 호환성을 위해 전송됩니다. 그러므로 요청을 받을 수도 있는 모든 셀에서 전파가 사용 가능으로 설정되어 있는지 확인하려면 구성을 검토해야 합니다. 전파가 완전히 사용 가능으로 설정되었는지 확인하기 위해서는 관리 콘솔에서 몇몇 장소를 검사해야 합니다. 자세한 정보는 Application Server 간에 보안 속성 전파의 내용을 참조하십시오.
- 전파하고 싶지 않은 전파 제외 목록에 사용자 정의 오브젝트를 추가하십시오. 특정 클래스 이름, 패키지 이름 또는 둘 모두와 일치하는 오브젝트의 전파를 제외하도록 특성을 구성할 수 있습니다.
예를 들어, 특정 프로세스와 관련된 사용자 정의 오브젝트가 있을 수 있습니다. 오브젝트가 전파되면 이는 올바른 정보를
포함하지 않습니다. WebSphere Application
Server에 이 오브젝트를 전파하지 않도록 말해야 합니다. 관리 콘솔을 사용하여 다음 단계를 완료하여 전파 제외 목록에 오브젝트를 지정하십시오.
- 보안 > 글로벌 보안 > 사용자 정의 특성 > 새로 작성을 클릭하십시오.
- 이름 필드에 com.ibm.ws.security.propagationExcludeList를 추가하십시오.
- 사용자 정의 오브젝트 이름을 값 필드에 추가하십시오. 사용자 정의 오브젝트 목록을 전파 제외 목록에 콜론(:)으로 분리하여 추가할 수 있습니다.
예를 들어, com.acme.CustomLocalObject:com.acme.private.*를 입력할 수 있습니다.
com.acme.CustomLocalObject와 같은 클래스 이름 또는 com.acme.private.*와 같은 패키지 이름을 입력할 수 있습니다.
이 예에서 WebSphere Application Server는
com.acme.CustomLocalObject와 같거나 com.acme.private로 시작하는 클래스를 전파하지 않습니다.
사용자 정의 오브젝트를 전파 제외 목록에 추가할 수 있지만 부작용이 있음을 유의해야 합니다. WebSphere Application Server는 불투명 토큰 또는 직렬화된 제목 컨텐츠를 싱글 사인온(SSO) 토큰의 수명 동안 로컬 캐시에 저장합니다. 기본 두 시간인 SSO 토큰의 수명은 관리 콘솔에서 SSO 특성에 구성됩니다. 불투명 토큰에 추가된 정보는 제외 목록에 없는 오브젝트만을 포함합니다.
사용자의 SSO 토큰 제한시간 값이 인증 캐시 제한시간 값보다 큰지 확인하십시오. 인증 캐시를 수정하려면 인증 캐시 설정에 대한 문서를 참조하십시오.
결과


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsec_propcustjavaser
파일 이름:tsec_propcustjavaser.html