보안 속성을 전파하기 위해 기본 전파 토큰 사용
기본 전파 토큰은 애플리케이션의 실행 스레드와 사용할 보안 인프라에 있습니다. 제품은 이 기본 전파 토큰 다운스트림을 전파하고 토큰은 호출이 각 홉에서 상륙하는 스레드에 남아 있습니다.
이 태스크 정보
데이터는 전파 토큰이 상륙하는 자원 컨테이너 내에서 사용 가능합니다. 전파가 작동하기 위해서는 요청이 전송되는 각 서버에서 전파 기능을 사용 가능으로 설정해야 함을 기억하십시오. 전파를 원하는 사용자의 환경에서 모든 셀의 보안 속성 전파를 사용 가능으로 설정했는지 확인하십시오.
PropagationToken 속성에 액세스하기 위한 API(Application Programming Interface)가 있는 WSSecurityHelper 클래스가 있습니다. 이 주제는 사용 시나리오를 문서화하고 예제를 포함합니다. 전파 토큰과 작업 영역 기능 사이에는 밀접한 관계가 있습니다. 이러한 기능의 주요 차이점은 속성을 전파 토큰에 추가한 후에는 속성을 변경할 수 없다는 점입니다. 보안 런타임이 감사 가능한 정보를 추가할 수 있고 해당 정보가 호출 수명 내내 거기에 남아 있을 수 있도록 이러한 속성을 변경할 수 없습니다. 속성을 특정 키에 추가할 때마다 ArrayList 오브젝트가 해당 속성을 보유하기 위해 저장됩니다. 동일한 키와 함께 추가되는 새 속성은 ArrayList 오브젝트에 추가됩니다. getAttributes를 호출할 때 ArrayList 오브젝트는 문자열 배열로 변환되고 순서는 보존됩니다. 문자열 배열의 첫 번째 요소는 해당 특정 키에 추가된 첫 번째 속성입니다.
기본 전파 토큰에서 데이터 변경사항을 토큰에 로깅하는 변경 플래그가 유지됩니다. 이러한 변경사항은 WebSphere® Application Server이 다운스트림 서버가 이러한 변경사항을 가질 수 있도록 인증 정보 다운스트림을 다시 전송해야 하는 때를 알 수 있도록 추적됩니다. 일반적으로, CSIv2(Common Secure Interoperability Version 2)는 인증된 클라이언트를 위해 서버 간 세션을 유지보수합니다. 전파 토큰이 변경되면 새 세션이 생성되고 후속적으로 새 인증이 발생됩니다. 메소드 중에 전파 토큰을 너무 자주 변경하면 잦은 다운스트림 호출이 야기됩니다. 여러 다운스트림 호출을 하기 전에 토큰을 변경하거나 각 다운스트림 호출 사이에 토큰을 변경하는 경우에는 보안 성능에 영향을 미칠 수도 있습니다.
프로시저
- 기본 전파 토큰으로부터 서버 목록을 구하십시오.
전파 토큰이 수평적으로나 다운스트림으로 전파되고 인증된 제목을 작성하는 데 사용될 때마다 수신 Application Server의 이름이 전파 토큰에 로깅됩니다. 호스트의 형식은 호출을 수신하는 각 Application Server의 셀 이름, 노드 이름 및 서버 이름에 대한 액세스를 제공하는 "Cell:Node:Server"입니다.
다음 코드는 이 이름 목록을 제공하고 J2EE(Java™ 2 Platform, Enterprise Edition) 애플리케이션으로부터 호출될 수 있습니다.
목록에서 각 서버의 형식은 다음과 같습니다. cell:node_name:server_name. 예를 들어, 결과물은 다음과 같습니다. myManager:node1:server1
String[] server_list = null;
// If security is disabled on this application server, do not bother checking
if (com.ibm.websphere.security.WSSecurityHelper.isServerSecurityEnabled())
{
try
{
// Gets the server_list string array
server_list = com.ibm.websphere.security.WSSecurityHelper.getServerList();
}
catch (Exception e)
{
// Performs normal exception handling for your application
}
if (server_list != null)
{
// print out each server in the list, server_list[0] is the first server
for (int i=0; i<server_list.length; i++)
{
System.out.println("Server[" + i + "] = " + server_list[i]);
}
}
} - getCallerList API를 사용하여 호출자 목록을 구하십시오. 기본 전파 토큰은 인증된 사용자가 실행 중인 스레드에 설정되거나 누군가가 속성을 전파 토큰에 추가하려고 시도할 때마다 생성됩니다. 인증된 사용자가 스레드에 설정될 때마다 사용자는 기본 전파 토큰에 로깅됩니다. 때때로 RunAs 사용자가 호출자와 다른 경우에는 동일 사용자가 여러 차례 로깅될 수도 있습니다. 다음 목록은 스레드에 추가되는 사용자가 전파 토큰에 로깅되는지 여부를 판별하기 위해 사용되는 규칙을 제공합니다.
- 현재 제목은 인증되어야 합니다. 예를 들어, 인증되지 않은 제목은 로깅되지 않습니다.
- 현재 인증된 제목은 제목이 이전에 로깅되지 않은 경우에 로깅됩니다.
- 로깅된 마지막 인증된 제목에 동일한 사용자가 포함되지 않는 경우에는 현재 인증된 제목이 로깅됩니다.
- 현재 인증된 제목은 전파 프로세스와 관련되는 각 고유한 Application Server에 로깅됩니다.
다음 코드 샘플은 getCallerList API를 사용하는 방법을 보여줍니다.
목록에서 각 호출자의 형식은 다음과 같습니다. cell:node_name:server_name:realm:port_number/securityName. 예를 들어, 결과물은 다음과 같습니다. myManager:node1:server1:ldap.austin.ibm.com:389/jsmith.
String[] caller_list = null;
// If security is disabled on this application server, do not check the caller list
if (com.ibm.websphere.security.WSSecurityHelper.isServerSecurityEnabled())
{
try
{
// Gets the caller_list string array
caller_list = com.ibm.websphere.security.WSSecurityHelper.getCallerList();
}
catch (Exception e)
{
// Performs normal exception handling for your application
}
if (caller_list != null)
{
// Prints out each caller in the list, caller_list[0] is the first caller
for (int i=0; i<caller_list.length;i++)
{
System.out.println("Caller[" + i + "] = " + caller_list[i]);
}
}
} - getFirst 호출자 API를 사용하여 첫 번째 인증된 사용자의 보안 이름을 구하십시오.
어떤 인증된 호출자가 요청을 시작했는지에 대해 알고 싶을 때마다 getFirstCaller 메소드를 호출할 수 있고 호출자 목록이 구문 분석됩니다. 그러나 이 메소드는 호출자의 보안 이름만을 리턴합니다. 보안 이름 이상을 알아야 하는 경우에는 getCallerList 메소드를 호출하고 문자열 배열에서 첫 번째 항목을 검색하십시오. 이 항목은 모든 호출자 정보를 제공합니다.
다음 코드 샘플은 getFirstCaller API를 사용하여 첫 번째 인증된 호출자의 보안 이름을 검색합니다.
예를 들어, 결과물은 다음과 같습니다. jsmith.String first_caller = null;
// If security is disabled on this application server, do not bother checking
if (com.ibm.websphere.security.WSSecurityHelper.isServerSecurityEnabled())
{
try
{
// Gets the first caller
first_caller = com.ibm.websphere.security.WSSecurityHelper.getFirstCaller();
// Prints out the caller name
System.out.println("First caller: " + first_caller);
}
catch (Exception e)
{
// Performs normal exception handling for your application
}
} - getFirstServer 메소드를 사용하여 요청의 첫 번째 Application Server의 이름을 구하십시오.
이 요청의 첫 번째 Application Server가 무엇인지 알고 싶을 때마다 getFirstServer 메소드를 직접 호출하십시오.
다음 코드 샘플은 getFirstServer API를 사용하여 첫 번째 Application Server의 이름을 검색합니다.
예를 들어, 결과물은 다음과 같습니다. myManager:node1:server1.
String first_server = null;
// If security is disabled on this application server, do not bother checking
if (com.ibm.websphere.security.WSSecurityHelper.isServerSecurityEnabled())
{
try
{
// Gets the first server
first_server = com.ibm.websphere.security.WSSecurityHelper.getFirstServer();
// Prints out the server name
System.out.println("First server: " + first_server);
}
catch (Exception e)
{
// Performs normal exception handling for your application
}
} - addPropagationAttribute API를 사용하여 사용자 정의 속성을 기본 전파 토큰에 추가하십시오. 사용자 정의 속성을 애플리케이션 용도를 위해 기본 전파 토큰에 추가할 수 있습니다. 이 토큰은 속성이 필요할 때마다 사용 가능하도록 요청 다운스트림을 따릅니다. 속성을 추가하기 위해 기본 전파 토큰을 사용하는 경우 다음 문제를 이해해야 합니다.
- 전파 토큰에 정보를 추가하면 CSIv2 세션 캐싱에 영향을 미칩니다. 정보를 원격 요청 사이에 조금만 추가하십시오.
- 특정 키와 함께 정보를 추가한 후에는 정보는 제거할 수 없습니다.
- 값을 특정 키에 필요한 만큼 많이 추가할 수 있습니다. 그러나, 모든 값은 리턴된 문자열 배열로부터 추가된 순서대로 사용 가능해야 합니다.
- 전파 토큰은 전파 및 보안이 사용 가능한 서버에서만 사용 가능합니다.
- Java 2 Security javax.security.auth.AuthPermission wssecurity.addPropagationAttribute 속성은 속성을 기본 전파 토큰에 추가하는 데 필요합니다.
- 애플리케이션은 com.ibm.websphere.security 또는 com.ibm.wsspi.security로 시작하는 키를 사용할 수 없습니다. 이러한 접두부는 시스템 용도로 예약되어 있습니다.
다음 코드 샘플은 addPropagationAttribute API를 사용하는 방법을 보여줍니다.
// If security is disabled on this application server,
// do not check the status of server security
if (com.ibm.websphere.security.WSSecurityHelper.isServerSecurityEnabled())
{
try
{
// Specifies the key and values
String key = "mykey";
String value1 = "value1";
String value2 = "value2";
// Sets key, value1
com.ibm.websphere.security.WSSecurityHelper.
addPropagationAttribute (key, value1);
// Sets key, value2
String[] previous_values = com.ibm.websphere.security.WSSecurityHelper.
addPropagationAttribute (key, value2);
// Note: previous_values should contain value1
}
catch (Exception e)
{
// Performs normal exception handling for your application
}
} - get PropagationAttributes
API를 사용하여 사용자 정의 속성을 구하십시오. 사용자 정의 속성은 addPropagationAttribute API를 사용하여 기본 전파 토큰에 추가됩니다. getPropagationAttributes API를 사용하여 이러한 속성을 검색하십시오. 이 토큰은 속성이 필요할 때마다 사용 가능하도록 요청 다운스트림을 따릅니다. 속성을 검색하기 위해 기본 전파 토큰을 사용하는 경우 다음 문제를 이해해야 합니다.
- 전파 토큰은 전파 및 보안이 사용 가능한 서버에서만 사용 가능합니다.
- 속성을 기본 전파 토큰에서 검색하는 데 Java 2 Security javax.security.auth.AuthPermission "wssecurity.getPropagationAttributes" 권한이 필요합니다.
addPropagationAttributes API를 사용하여 속성을 추가하려면 사용자 정의 속성을 기본 PropagationToken에 추가를 참조하십시오.
다음 코드 샘플은 getPropagationAttributes API를 사용하는 방법을 보여줍니다.
// If security is disabled on this application server, do not bother checking
if (com.ibm.websphere.security.WSSecurityHelper.isServerSecurityEnabled())
{
try
{
String key = "mykey";
String[] values = null;
// Sets key, value1
values = com.ibm.websphere.security.WSSecurityHelper.
getPropagationAttributes (key);
// Prints the values
for (int i=0; i<values.length; i++)
{
System.out.println("Value[" + i + "] = " + values[i]);
}
}
catch (Exception e)
{
// Performs normal exception handling for your application
}
}예를 들어, 결과물은 다음과 같습니다.Value[0] = value1
Value[1] = value2 - 기본 토큰 팩토리 이외의 토큰 팩토리를 사용하려면 전파 토큰 팩토리 구성을
수정하십시오.
WebSphere Application Server이 기본 전파 토큰을 생성하면 Application Server는 com.ibm.wsspi.security.token.propagationTokenFactory 특성을 사용하여 지정된 TokenFactory 클래스를 사용합니다.
이 특성에 지정된 기본 토큰 팩토리는 com.ibm.ws.security.ltpa.AuthzPropTokenFactory라고 불립니다. 이 토큰 팩토리는 전파 토큰에서 데이터를 인코딩하고 데이터를 암호화하지 않습니다. 전파 토큰은 일반적으로 SSL(Secure Sockets Layer)을 사용하여 CSIv2를 통해 플로우되므로 토큰 암호화는 필요하지 않습니다. 그러나 전파 토큰에 추가로 보안이 필요한 경우에는 암호화를 얻기 위해 다른 토큰 팩토리 구현을 이 특성과 연관시킬 수 있습니다. 예를 들어, com.ibm.ws.security.ltpa.LTPAToken2Factory 토큰 팩토리를 이 특성과 연관시키기로 선택한 경우에는 토큰은 AES 암호화됩니다. 그러나 보안 필요와 비교하여 성능 영향을 고려해야 합니다. 전파 토큰에 민감한 정보를 추가하는 것은 토큰 팩토리 구현을 단지 인코딩하는 대신에 암호화하는 무언가로 변경해야 하는 좋은 이유입니다.
- 관리 콘솔을 여십시오.
- 보안 > 글로벌 보안을 클릭하십시오.
- 사용자 정의 특성을 클릭하십시오.
- 사용자 자체의 서명 및 기본 전파 토큰의 암호화를 수행하십시오. 사용자 자체 서명 및 기본 전파 토큰의 암호화를 수행하려면 다음 클래스를 구현해야 합니다.
- com.ibm.wsspi.security.ltpa.Token
- com.ibm.wsspi.security.ltpa.TokenFactory
- 사용자의 토큰 팩토리를 기본 전파 토큰과 연관시키십시오.
- 관리 콘솔을 여십시오.
- 보안 > 글로벌 보안을 클릭하십시오.
- 사용자 정의 특성을 클릭하십시오.
- com.ibm.wsspi.security.token.propagationTokenFactory 특성을 찾고 이 특성의 값이 사용자 정의 토큰 팩토리 구현과 일치하는지 확인하십시오.
- WebSphere Application Server 클래스 로더가 클래스를 로드할 수 있도록 구현 클래스가 app_server_root/classes 디렉토리에 놓이는지 확인하십시오.
WebSphere Application Server 클래스 로더가 클래스를 로드할 수 있도록 구현 클래스가 ${USER_INSTALL_ROOT}/classes 디렉토리에 놓이는지 확인하십시오.
QEJBSVR 사용자 프로파일이 클래스 디렉토리에 대한 읽기, 쓰기 및 실행(*RWX) 권한이 있는지 확인하십시오. Authority(WRKAUT) 명령을 사용하여 디렉토리에 대한 권한을 볼 수 있습니다.
예


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