지금까지 설명된 구성 태스크를 사용하면 고객이 다음과 같은 요구사항을 제외하고 예제에 나열된 요구사항을 이행할 수 있습니다.
"7 - 사용자가 CentralID에 등록되면 바로 범용 액세스에 로그인할 수 있어야 합니다. ID가 다른 시스템에 전파될 때까지 대기하느라 발생하는 지연은 없어야 합니다.
Cúram 범용 액세스가 올바르게 작동하려면 각 사용자에게 ExternalUser 테이블에 항목이 있어야 합니다. 고객이 LDAP 디렉토리에서 Cúram ExternalUser 테이블로 사용자를 가져오는 일괄처리 프로세스를 빌드할 수는 있지만 사용자가 CentralID에 등록한 다음 즉시 범용 액세스를 사용할 수 있어야 하므로 요구사항 7을 만족하지 않습니다. 또 다른 옵션으로 새 사용자가 CentralID에 등록되면 호출될 유사한 메커니즘 또는 웹 서비스를 구축할 수 있습니다. 웹 서비스를 구현하면 ExternalUser 테이블에 해당 항목이 작성됩니다.
그러나 이 문서는 이제 LDAP 서버에 관련 항목이 있는지를 확인한 후에 새 계정을 즉시 작성하는 기본 로그인 동작을 대체하는 보다 단순한 옵션에 대해 설명합니다.
curam.citizenworkspace.security.impl.SecurityStrategy 클래스를 확장하고 authenticate() 메소드를 대체하여 범용 액세스에서 기본 로그인 동작을 대체할 수 있습니다. 아래 코드는 위에 설명된 요구사항을 만족하도록 SecurityStrategy 및 기타 보안 API를 사용하는 방법에 대해 개요합니다.
public class CustomSecurityStrategy extends SecurityStrategy { @Inject private CitizenWorkspaceAccountManager cwAccountManager; ... @Override public String authenticate(final String username, final String password) throws AppException, InformationalException { final String retval = null; if (username.equals(PUBLIC_CITIZEN)) { return super.authenticate(username, password); } // 생성된 계정을 정상으로 인증 if (cwAccountManager.isGeneratedAccount(username)) { return super.authenticate(username, password); } // 사용자가 LDAP에 있는지 확인 // 그러면 해커가 Curam에는 있지만 LDAP에는 없는 // 여러 위조 계정을 등록하지 못하도록 함 if (!isUserInLDAP(username)) { return SECURITYSTATUS.BADUSER; } // 이 사용자의 계정이 없는 경우 if (!cwAccountManager.hasAccount(username)) { createUserAccount(username); } return SECURITYSTATUS.LOGIN; } private void createUserAccount(final String username) throws AppException, InformationalException { final CreateAccountDetails newAcctDetails; ... cwAccountManager.createStandardAccount(newAcctDetails); } }
위의 코드는 로그인한 사용자가 publiccitizen 사용자인지 아니면 생성된 계정인지를 확인합니다. 두 경우 모두 인증 로직은 기본 SecurityStrategy에 위임됩니다. 등록된 사용자의 경우 보안 전략이 LDAP 디렉토리에 사용자가 있는지를 확인합니다. 사용자가 LDAP 디렉토리에 있지만 아직 Cúram에는 없는 경우 새 사용자 계정이 작성됩니다. WebSphere의 사용자 레지스트리 또는 WebSphere의 LDAP JAAS 모듈이 인증을 처리하므로 사용자 정의 코드에서 LDAP에 대해 사용자를 인증하지 않아도 됩니다. authenticate() 메소드의 password 매개변수는 단방향 해시를 사용하여 암호화된다는 점에 유의하십시오. Cúram 애플리케이션의 클라이언트 측에서 애플리케이션의 서버 측으로 안전하게 전송될 수 있도록 합니다.
CustomSecurityStrategy를 설치하려면 기본 보안 전략 대신 바인드되어야 합니다. 다음과 같이 Guice Module을 사용하여 구현을 바인드할 수 있습니다.
public class CustomModule extends AbstractModule { @Override protected void configure() { binder().bind(SecurityStrategy.class).to( CustomSecurityStrategy.class); } }
CustomModule은 시작 시 구성되어야 합니다. 다음과 같이 사용자 정의 구성요소에 DMX 파일을 추가하여 수행할 수 있습니다.
<CURAM_DIR>/EJBServer/custom/data/initial/MODULECLASSNAME.dmx <?xml version="1.0" encoding="UTF-8"?> <table name="MODULECLASSNAME"> <column name="moduleClassName" type="text" /> <row> <attribute name="moduleClassName"> <value>gov.myorg.CustomModule</value> </attribute> </row> </table>