OAM 및 SP의 사용자정의 사후 인증 모듈
이 문서에서는 통합 SSO가 완료된 후 호출될 사용자 정의 인증 플러그인을 구현하는 방법을 보여 줍니다.
- SAML 검증에 포함된 정보(IdP 이름, 사용자 속성...)에 액세스
- SAML 사용자 속성을 기반으로 LDAP 사용자 속성 업데이트
사용자 정의 인증 플러그인을 설계하는 방법에 대한 자세한 내용은 http://docs.oracle.com/cd/E40329_01/dev.1112/e27134/authnapi.htm
모듈 개발 방법을 설명하는 OAM Developer's Guide 3장을 참조하십시오. 다음 작업에 중점을 둡니다.
- 플러그인 구현
- 컴파일
- 패키지화
- OAM에 플러그인 업로드
- 새 통합 인증 모듈 생성
통합 인증 모듈
중요 사항: 통합 테스트 SP 응용 프로그램을 사용할 때 인증 모듈이 통과되어 해당 모듈에 정의된 플러그인이 실행되지 않습니다.
OAM 인증 모듈은 다음과 같습니다.
- 인증 플러그인의 모음
- 플러그인 실행 순서를 결정하는 조정
OOTB 통합 인증 모듈(FederationPlugin)은 두 개의 플러그인으로 구성됩니다.
- FedAuthnRequestPlugin: 통합 SSO 플로우를 시작하고, 이전 인증 플러그인에서 제공하지 않은 경우 사용할 IdP을 결정하고, SSO 요청을 생성하고, 사용자를 IdP로 재지정합니다.
- AssertionProcessing: 수신 SAML/OpenID SSO 응답을 처리하고 LDAP 디렉토리의 로컬 사용자 레코드에 메시지를 매핑합니다.
다음 방법으로 오케스트레이션을 볼 수 있습니다.
- OAM 관리 콘솔(
http(s)://oam-adminhost:oam-admin-port/oamconsole
)로 이동합니다. - 액세스 관리자, 인증 모듈로 이동합니다.
- FederationScheme를 엽니다.
- Steps 탭을 눌러 플러그인을 확인합니다.
- 조정 단계 탭을 눌러 여러 플러그인과 작업을 시작하는 데 사용되는 플러그인 간의 조정을 확인합니다.
그림 Federation_Plugin_Screen.png 설명
AssertionProcessing 플러그인
AssertionProcessing
플러그인은 수신 SSO 검증의 검증 및 소비를 담당하고, 검증을 로컬 LDAP 사용자 레코드에 매핑하고, 사용자 ID와 검증 콘텐츠를 OAM에 반환합니다. 인증 플러그인 간에 공유되는 AuthenticationContext
인스턴스에는 다양한 플러그인이 런타임 시 통신할 수 있게 해주는 CredentialParam
객체와 인증 작업의 결과가 포함됩니다.
oracle.security.am.plugin.authn.AuthenticationContext
: 다양한 인증 플러그인에서 공유되는 인증 작업에 대한 컨텍스트oracle.security.am.plugin.authn.Credential
: AuthenticationContext에 저장된 인증서 데이터 모음oracle.security.am.plugin.authn.CredentialParam
: 이름으로 참조되는 단일 인증서 매개변수이며 인증서 인스턴스에 저장된 유형에 따라 유형(대부분 시간 문자열)이 있습니다.
인증 컨텍스트 데이터
인증에 성공하면 OAM 인증 플러그인은 AuthenticationContext
에 다음 데이터를 반환합니다.
- 다음 주체 인스턴스가 있는 사용자를 식별하는 JaaS 주체:
oracle.security.am.common.utilities.principal.OAMUserPrincipal
(이름에userID
포함)- 이름에 사용자 DN이 포함된
oracle.security.am.common.utilities.principal.OAMUserDNPrincipal
- 이름이 사용자의 GUID를 포함하는
oracle.security.am.common.utilities.principal.OAMGUIDPrincipal
(있는 경우)
AuthenticationContext
의 인증서 객체에 포함된 다음 CredentialParam
인스턴스
- KEY_USERNAME_DN 문자열에서 참조된 사용자의 DN
- 유형: 문자열
- 값: 사용자의 DN
AuthenticationContext
에 포함된 다음 PluginResponse
인스턴스:
KEY_AUTHENTICATED_USER_NAME
문자열에서 참조하는 userID- 유형: PluginAttributeContextType.LITERAL
- 값: userID
사용자 레코드가 있는 ID 저장소의 이름
KEY_IDENTITY_STORE_REF
문자열에서 참조합니다.- 유형: PluginAttributeContextType.LITERAL
- 값: OAM ID 저장소 이름
통합 SP 처리 중 무효화된 경우 인증 레벨입니다(자세한 내용은 Art 27 Mapping Fed Authn Method to Authn Levels in OAM SP 참조).
- KEY_AUTHN_LEVEL 문자열에서 참조합니다.
- 유형: PluginAttributeContextType.LITERAL
- 값: 인증 레벨(문자열)
검증 데이터. 각 요소는 독립형 PluginResponse
인스턴스입니다.
- 이름으로 참조(아래 참조)
- 유형: PluginAttributeContextType.SESSION
- 값: 문자열 객체입니다.
AuthenticationContext에 포함된 데이터는 OAM에서 추가 처리를 위해 사용됩니다.
검증 데이터는 다음 요소로 구성됩니다.
- IdP 파트너 이름,
fed.partner
에서 참조 fed.nameidformat
에서 참조되는 SAML NameID 형식fed.nameidvalue
에서 참조하는 NameID 값fed.aLr.ATTRIBUTE_NAME
에서 참조되고ATTRIBUTE_NAME
가 있는 검증에 포함된 사용자 속성- 로컬 OAM 세션 속성 이름에 매핑된 IdP 속성 프로파일이 없을 경우 검증에 포함된 속성의 이름입니다.
- 또는 IdP 파트너에 사용되는 IdP 속성 프로파일에 따라 검증의 속성 이름을 로컬 OAM 세션 속성 이름에 매핑한 결과인 OAM 세션 속성 이름의 이름입니다.
예제
다음 예에서는 플로우 끝에 AssertionProcessing
플러그인에서 반환된 데이터를 살펴보겠습니다.
- OAM은 SP로 작동합니다.
- 파트너 IdP는 OAM/SP 서버에서
acmeIdP
로 등록된 SAML 2.0 IdP이며 IdP의 ProviderID/발행자는http://acme.com/idp
입니다. - IdP는 다음을 포함하는 SAML 2.0 검증을 전송합니다.
urn:oasis:names:tc:SAML:1.1:nameidformat:emailAddress
형식의 NameID(값이 사용자의 전자메일 주소임)- 세 가지 SAML 속성
userID
를 포함하는 uid로 설정된 이름- 사용자의 성을 포함하는 성으로 설정된 이름
- 사용자의 이름을 포함하는 이름으로 설정된 이름
OAM/SP의 IdP 파트너는 SAML 속성 이름 uid를 OAM 세션 속성 이름 userid에 매핑하는 하나의 항목만 포함된 IdP 속성 프로파일에 바인드됩니다. 이 예에서 테스트 사용자는 alice입니다.
- OAM/SP 앨리스의 UserID
- SAML 검증에서 전송된 속성:
- userID: 앨리스
- lastname: 애플릿
- 이름: Alice
- 앨리스의 이메일 주소는
alice@oracle.com
입니다.
SAML 2.0 검증의 예는 다음과 같습니다.
<samlp:Response ..>
<saml:Issuer ...>hLp://acme.com/idp</saml:Issuer>
<samlp:Status>
<samlp:StatusCode
Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
</samlp:Status>
<saml:Assertion ...>
<saml:Issuer ...>hLp://acme.com/idp</saml:Issuer>
<dsig:Signature ...>
...
</dsig:Signature>
<saml:Subject>
<saml:NameID ...>alice@oracle.com</saml:NameID>
...
</saml:Subject> <saml:Conditions ...>
...
</saml:Conditions> <saml:AuthnStatement ...>
...
</saml:AuthnStatement>
<saml:AttributeStatement ...>
<saml:Attribute Name="userid" ...>
<saml:AttributeValue ...>alice</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="lastname" ...>
<saml:AttributeValue ...>Appleton</saml:AttributeValue> </saml:Attribute>
<saml:Attribute Name="firstname" ...>
<saml:AttributeValue ...>Alice</saml:AttributeValue>
</saml:Attribute>
</saml:AttributeStatement>
</saml:Assertion>
</samlp:Response>
SAML 2.0 검증 처리 및 로컬 사용자 레코드에 대한 수신 SSO 응답 매핑에 성공한 후 AssertionProcessing
플러그인은 다음 데이터를 사용하여 AuthenticationContext
OAM으로 돌아갑니다. 다음을 포함하는 제목:
- 이름이 alice로 설정된
oracle.security.am.common.utilities.principal.OAMUserPrincipal
(alice의 로컬 userID) - 이름이 cn=alice,ou=users,dc=us,dc=oracle,dc=com으로 설정된
oracle.security.am.common.utilities.principal.OAMUserDNPrincipal
(alice의 로컬 DN) - 이름이 앨리스의 로컬 GUID로 설정된
oracle.security.am.common.utilities.principal.OAMGUIDPrincipal
AuthenticationContext
의 인증서 객체에 포함된 다음 CredentialParam
인스턴스
- 값이
cn=alice
,ou=users
,dc=us
,dc=oracle
,dc=com
(alice의 로컬 DN)으로 설정된KEY_USERNAME_DN
AuthenticationContext
에 포함된 다음 PluginResponse
인스턴스:
- 문자열 값이
alice
(alice의 로컬 userID)로 설정되고 유형이 리터럴로 설정된KEY_AUTHENTICATED_USER_NAME
- 문자열 값이
IDStore
(로컬 OAM ID 저장소의 이름)로 설정되고 유형이 리터럴로 설정된KEY_IDENTITY_STORE_REF
- 문자열 값이
acmeIdP
(로컬 IdP 파트너 이름)으로 설정된fed.partner
. 유형을 세션fed.nameidformat
로 설정하고 문자열 값을urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
로 설정하며 유형을 세션으로 설정 - 문자열 값이 alice@oracle.com로 설정된
fed.nameidvalue
, 문자열 값이 alice로 설정된 세션fed.attr.uid
로 유형 설정, 유형이 세션으로 설정됨(IdP 속성 프로파일로 인해 속성 이름이 userid에서 uid로 매핑됨) - 문자열 값이 Appleton으로 설정되고 유형이 세션으로 설정된
fed.attr.lastname
- 문자열 값이 Alice로 설정되고 유형이 session으로 설정된
fed.attr.firstname
사용자정의 인증 플러그인
개요
이 문서에서는 OAM/SP 배치가 다음을 지원해야 한다고 가정합니다.
- 사용자가 OAM/SP로 재지정되지만 로컬 계정이 없는 경우 사용자 계정 생성/프로비전: 새로 생성된 계정이 SAML 2.0 검증 데이터로 채워짐
- LDAP 사용자 속성이 최신 SAML 2.0 검증 데이터로 새로 고쳐지도록 사용자 계정을 자동으로 업데이트합니다.
#1에 대한 지원을 제공하는 JIT(Just-In-Time User Provisioning) 모듈 사용 #2에 대한 요구 사항을 충족하려면 다음과 같은 사용자 정의 인증 플러그인이 필요합니다.
AssertionProcessing
플러그인을 성공적으로 처리한 후에 호출- SAML 2.0 검증에서 추출된 데이터 검사
- LDAP에 연결 후 LDAP 사용자 속성 업데이트
이 예제의 경우 환경은 다음으로 구성됩니다.
-
SAML 2.0 SP로서의 OAM
-
파트너 IdP는 OAM/SP 서버에서 acmeIdP로 등록된 SAML 2.0 IdP이며 IdP의 ProviderID/발행자는 http://acme.com/idp입니다.
-
IdP는 다음을 포함하는 SAML 2.0 검증을 전송합니다.
-
urn:oasis:names:tc:SAML:1.1:nameidformat:emailAddress
형식의NameID
(값이 사용자의 전자메일 주소임) -
세 가지 SAML 속성
-
userID를 포함하는 uid로 설정된 이름
-
사용자의 성을 포함하는 성으로 설정된 이름
-
사용자의 이름을 포함하는 이름으로 설정된 이름
-
OAM/SP의 IdP 파트너는 하나의 항목만 있는 IdP 속성 프로파일에 바인드됩니다. 그러면 SAML 속성 이름 uid가 OAM 세션 속성 이름 userid에 매핑됩니다.
사용자 정의 인증 플러그인은 다음으로 구성됩니다.
oracle.security.am.plugin.authn.AbstractAuthenticationPlugIn
클래스를 확장하는 하나의 Java 클래스- Java 클래스를 설명하는
MANIFEST.MF
파일 - 플러그인을 설명하는 XML 파일
이러한 세 가지 요소는 JAR 파일에 번들로 제공되며 JAR 파일은 OAM 관리 콘솔을 통해 OAM 서버로 업로드됩니다. 업로드 및 활성화되면 통합 인증 모듈을 수정합니다.
Java 클래스
사용자 정의 인증 플러그인을 구현하는 클래스는 다음을 준수해야 합니다.
-
oracle.security.am.plugin.authn.AbstractAuthenticationPlugIn
클래스 확장 -
다음 메소드를 구현합니다.
-
public ExecutionStatus
프로세스(AuthenticationContext 컨텍스트)가AuthenticationException
를 발생시킵니다. -
상태(failure 또는 success)를 반환해야 합니다.
-
이 예제에서 이 메소드는 검증 데이터와 LDAP에 접속된 사용자 DN을 검색하고 검증 데이터를 기반으로 사용자 레코드 속성을 업데이트합니다.
-
public String getPluginName()
는 사용자정의 플러그인의 이름을 반환합니다. 이 예에서는CustomAttributesUpdatePlugin
를 반환합니다. -
public String getDescription()
는 사용자 정의 인증 플러그인에 대한 설명을 반환합니다. 이 예에서는Custom Attributes Update Plugin
를 반환합니다. -
public Map<String, MonitoringData> getMonitoringData()
인증 플러그인 플로우에서 사용되지 않으며 이 예에서는 널을 반환합니다. -
public boolean getMonitoringStatus()
인증 플러그인 플로우에 사용되지 않음 이 예에서는 false를 반환합니다. -
public int getRevision()
는 매니페스트 파일에 지정된 버전과 동일한 값이어야 합니다. 이 예에서는 10을 반환합니다. -
public void setMonitoringStatus(boolean status)
인증 플러그인 흐름에 사용되지 않음 이 예제에서는 이 메소드가 비어 있습니다.
다음 코드는 사용자 정의 플러그인의 예입니다.
package postsp;
import java.util.Hashtable;
import java.util.Map;
import java.util.Set;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.security.auth.Subject;
import oracle.security.am.common.utilities.principal.OAMUserDNPrincipal;
import oracle.security.am.common.utilities.principal.OAMUserPrincipal;
import oracle.security.am.plugin.ExecutionStatus;
import oracle.security.am.plugin.MonitoringData;
import oracle.security.am.plugin.PluginAttributeContextType;
import oracle.security.am.plugin.PluginResponse;
import oracle.security.am.plugin.authn.AbstractAuthenticationPlugIn;
import oracle.security.am.plugin.authn.AuthenticationContext;
import oracle.security.am.plugin.authn.AuthenticationException;
public class CustomAttributesUpdatePlugin extends
AbstractAuthenticationPlugIn
{
public ExecutionStatus process(AuthenticationContext context)
throws AuthenticationException {
// user's ID and DN. Note: we are not making necessary checks for size/null to
// keep the sample code minimal.
Subject subject = context.getSubject();
Set<OAMUserPrincipal> principalsUserID =
subject.getPrincipals(OAMUserPrincipal.class);
Set<OAMUserDNPrincipal> principalsDN =
subject.getPrincipals(OAMUserDNPrincipal.class);
String localUserID =
(String)principalsUserID.iterator().next().getName();
String localUserDN = (String)principalsDN.iterator().next().getName();
// get the assertion data. Note: We are not making necessary checks for size/null to
// keep the sample code minimal.
PluginResponse partnerResponse = context.getResponse( PluginAttributeContextType.SESSION, "fed.partner");
String partnerName = (String)partnerResponse.getValue(); PluginResponse nameIDResponse = context.getResponse(
PluginAttributeContextType.SESSION, "fed.nameidvalue");
String nameID = (String)nameIDResponse.getValue();
PluginResponse uidResponse = context.getResponse(
PluginAttributeContextType.SESSION, "fed.aLr.uid");
String uid = (String)uidResponse.getValue();
PluginResponse firstnameResponse = context.getResponse(
PluginAttributeContextType.SESSION, "fed.aLr.firstname");
String firstname = (String)firstnameResponse.getValue(); PluginResponse lastnameResponse = context.getResponse(
PluginAttributeContextType.SESSION, "fed.aLr.lastname");
String lastname = (String)lastnameResponse.getValue();
try {
// open ldap connection
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://host:port");
env.put(Context.SECURITY_PRINCIPAL, "admin");
env.put(Context.SECURITY_CREDENTIALS, "password"); DirContext ldapContext = new InitialDirContext(env);
// modify user ldap record. Note: We are not making the necessary checks to
// keep the sample code minimal.
Attributes attributes = new BasicAttributes();
attributes.put(new BasicAttribute("givenname", firstname));
attributes.put(new BasicAttribute("sn", lastname));
attributes.put(new BasicAttribute("mail", nameID));
attributes.put(new BasicAttribute("uid", uid));
ldapContext.modifyAttributes(localUserDN,
DirContext.REPLACE_ATTRIBUTE, attributes);
}
catch (NamingException ex) {
throw new AuthenticationException(ex);
}
// return success, so that OAM can resume the flow
return ExecutionStatus.SUCCESS;
}
public String getPluginName() {
return "CustomAttributesUpdatePlugin";
}
public String getDescription() {
return "Custom Attributes Update Plugin";
}
public Map<String, MonitoringData> getMonitoringData() {
return null;
}
public boolean getMonitoringStatus() {
return false;
}
public int getRevision() {
return 10;
}
public void setMonitoringStatus(boolean arg0) {
} }
플러그인 등록 파일
사용자 정의 인증 플러그인은 다음과 같은 플러그인 XML 파일에 정의되어야 합니다.
<Plugin type="Authentication">
<author>uid=admin</author>
<email>admin@example</email>
<creationDate>08:00:00,2014-01-15</creationDate>
<description>Custom Attributes Update Plugin</description>
<conhguration>
</conhguration>
</Plugin>
중요 참고 사항: XML 파일은 플러그인을 구현하는 클래스(이 경우 CustomAttributesUpdatePlugin.xml)와 동일한 이름을 가져야 합니다.
자세한 내용은 OAM Developer's Guide를 참조하십시오.
Manifest 파일
Before packaging the custom Authentication plugin in a JAR file, a MANIFEST.MF must be defined such as: Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: CustomAttributesUpdatePlugin Bundle-SymbolicName: CustomAttributesUpdatePlugin Bundle-Version: 10 Bundle-Activator: postsp.CustomAttributesUpdatePlugin Import-Package: org.osgi.framework;version=”1.3.0”,oracle.security.am.plugin,oracle.security.am.plugin.authn,oracle.security.am.common.utilities.principal,javax.naming,javax.naming.directory,javax.security.auth Bundle-RequiredExecutionEnvironment: JavaSE-1.6
자세한 내용은 OAM Developer's Guide를 참조하십시오.
주: 매니페스트 파일은 플러그인에 사용된 모든 패키지를 나열하는 Import-Package 등록 정보를 포함해야 합니다.
플러그인 작성
컴파일 중
OAM 배치에서 다음 JAR 파일을 컴파일에 사용해야 합니다.
- felix.jar
- 오암 plugin.jar
- utilities.jar
이러한 파일은 다음 위치에 있습니다.
- felix.jar:
$IAM_HOME/oam/server/lib/plugin/felix.jar
- oam-plugin.jar:
$IAM_HOME/oam/server/lib/plugin/oamplugin.jar
- utilities.jar:
$IAM_HOME/oam/server/lib/plugin/utilities.jar
이 예에서는 CustomAttributesUpdatePlugin.java 파일을 src/postsp 폴더에 배치합니다.
bash-4.1$ ls -l src/postsp/ total 4
-rw-r--r-- 1 root root 4377 Oct 1 09:54 CustomAttributesUpdatePlugin.java
컴파일하려면 다음 명령을 실행합니다.
$JDK_HOME/bin/javac -cp $IAM_HOME/oam/server/lib/plugin /felix.jar:$IAM_HOME/oam/server/lib/plugin/oam-
plugin.jar:$IAM_HOME/oam/server/lib/plugin/utilities.jar src/postsp /\*.java
커스텀 플러그인 패키지화
이전 섹션에 나열된 콘텐츠를 기반으로 현재 디렉토리에 MANIFEST.MF
를 생성하고 이전 섹션에 나열된 플러그인 정의를 포함하는 src 디렉토리의 CustomAttributesUpdatePlugin.xml
를 생성했습니다.
find
.
./MANIFEST.MF
./src
./src/userauthn
./src/userauthn/CustomAttributesUpdatePlugin.class
./src/userauthn/CustomAttributesUpdatePlugin.java
./src/CustomAttributesUpdatePlugin.xml
플러그인 및 필요한 파일을 포함하는 CustomAttributesUpdatePlugin.jar
JAR 파일을 생성하려면 다음 명령을 실행합니다.
jar cfvm CustomAttributesUpdatePlugin.jar MANIFEST.MF -C src/ . added manifest adding: CustomAttributesUpdatePlugin.xml(in = 238) (out= 158)(deflated 33%) adding: postsp/(in = 0) (out= 0)(stored 0%) adding: postsp/CustomAttributesUpdatePlugin.java(in = 4377) (out= 1206)(deflated 72%) adding: postsp/CustomAttributesUpdatePlugin.class(in = 3726) (out= 1667)(deflated 55%)
그러면 CustomAttributesUpdatePlugin.jar가 생성됩니다. 파일 내용을 보려면 다음과 같이 하십시오.
unzip -l CustomAttributesUpdatePlugin.jar Archive: CustomAttributesUpdatePlugin.jar
길이 | 일자 | 시간 | 이름 |
---|---|---|---|
0 | 10-01-2014 | 10:04 | 메타 정보 |
542 | 10-01-2014 | 10:04 | 메타 정보/MANIFEST.MF |
238 | 10-01-2014 | 09:11 | CustomAttributesUpdatePlugin.xml |
0 | 10-01-2014 | 09:59 | postsp/ |
4377 | 10-01-2014 | 09:54 | postsp/CustomAttributesUpdatePlugin.java |
3726 | 10-01-2014 | 09:54 | postsp/CustomAttributesUpdatePlugin.class |
8883 | 6 |
중요 참고 사항: JAR 파일은 플러그인을 구현하는 클래스(이 경우
CustomAttributesUpdatePlugin.jar
)와 동일한 이름을 가져야 합니다.
사용자정의 인증 플러그인 배포
다음 단계를 수행하여 OAM에서 사용자 정의 인증 플러그인을 배치합니다.
- OAM 관리 콘솔(
http(s)://oam-adminhost:oam-admin-port/oamconsole
)로 이동합니다. - Access Manager, Plugins로 이동합니다.
- 플러그인 임포트를 누릅니다.
- 플러그인 JAR 파일(이 예제에서는
CustomAttributesUpdatePlugin.jar
)을 선택합니다.
그림 Specifying_Plug-in_JAR_file.png에 대한 설명
플러그인이 업로드됨 상태임:
그림 Plug-in_loaded_Screen.png에 대한 설명
플러그인을 런타임 OAM 서버에 배포하고 활성화해야 합니다.
- 플러그인 선택
- 선택 항목 배포를 클릭합니다. 플러그인의 활성화 상태 탭에 플러그인 상태가 표시됩니다.
그림 Plug-in_Screen_with_Status.png에 대한 설명
플러그인을 활성화해야 합니다.
- 플러그인 선택
- Activate Selected를 누릅니다. 플러그인의 Activation Status 탭에 플러그인 상태가 표시됩니다.
그림 Plug-in_Screen_with_Status_Activated.png에 대한 설명
인증 모듈 생성
기존 모듈과 다른 기존 FederationPlugin
인증 모듈을 기반으로 새 통합 인증 모듈을 생성합니다.
-
CustomAttributesUpdatePlugin
는AssertionProcessing
플러그인의 성공 결과 이후 호출되는 단계입니다. -
조정:
-
성공 시 매핑 성공
-
실패 시 실패에 매핑됩니다.
-
오류 시 실패에 매핑됩니다.
다음 단계를 수행하여 새 인증 모듈을 생성합니다.
- OAM 관리 콘솔(
http(s)://oam-adminhost: oam-admin-port/oamconsole
)로 이동합니다. - Access Manager, Authentication Modules로 이동합니다.
- 인증 모듈 생성을 누릅니다.
- 사용자정의 인증 모듈 생성을 선택합니다.
- 이름 입력(예:
CustomFedModule
)
그림 Creating_Authentication_Module.png 설명
다음 단계를 수행하여 새 인증 모듈에 단계를 추가합니다.
- Steps 탭을 누릅니다.
- 추가를 눌러
FedAuthnRequestPlugin
단계를 추가합니다. - 단계 이름:
FedAuthnRequestPlugin
- 플러그인 이름:
FedAuthnRequestPlugin
- OK를 누릅니다.
- 추가를 눌러
AssertionProcessing
단계를 추가합니다. - 단계 이름:
AssertionProcessing
- 플러그인 이름:
FedUserAuthenticationPlugin
- OK를 누릅니다.
- 추가를 눌러
AttributesUpdate
단계를 추가합니다. - 단계 이름:
AttributesUpdate
- 플러그인 이름:
CustomAttributesUpdatePlugin
- OK를 누릅니다.
그림 Add_Authentication_Module.png 설명
그림 Add_Assertion_Processing_Screen.png 설명
그림 Attributes_Update_Screen.png 설명
Steps 탭에는 다음이 표시됩니다.
다음 단계를 수행하여 새 인증 모듈에 대한 조정 단계를 정의합니다.
- [단계 조정] 탭을 누르고
FedAuthnRequestPlugin
에 대한 초기 단계로FedAuthnRequestPlugin
선택: - 성공 시 성공 선택
- 실패 시
AssertionProcessing
선택 오류 시 실패 선택 AssertionProcessing
의 경우:- 성공 시
AttributesUpdate
선택 - 실패 시 실패 선택 오류 시 실패 선택
AttributesUpdate
의 경우:- 성공 시 성공 선택
- 실패 시 실패 선택
- 오류 시 실패 선택
- Apply를 누릅니다.
그림 Define_Orchestration_Screen.png 설명
인증 체계
새 인증 모듈을 사용하는 인증 정책으로 리소스를 보호하려면 먼저 새 사용자 정의 모듈을 참조하는 새 인증 체계를 생성해야 합니다. 인증 정책이 인증 모듈이 아닌 인증 체계에 바인드되었으므로 이 작업은 필수입니다. 해당 사용자 정의 모듈에 대한 새 인증 체계를 만들려면 다음 단계를 수행하십시오.
- OAM 관리 콘솔(
http(s)://oam-adminhost:oam-admin-port/oamconsole
)로 이동합니다. - Access Manager, Authentication Schemes로 이동합니다.
- Create Authentication Scheme를 누릅니다.
- 이름(예:
CustomFedScheme
) 및 설명을 입력합니다. 인증 레벨을 허용 가능한 값으로 설정합니다(이 예의 경우 2). - 챌린지 방법으로
FORM
을 선택합니다. - Challenge Redirect URL을 설정합니다(이 예에서는
/oam/server/
로 설정). - 새로 만든 사용자 정의 Authentication Module(예에서는
CustomFedModule
)을 선택합니다. - 당면 과제 URL(이 예의 경우
/pages/servererror.jsp
) 설정 - 컨텍스트 유형 설정(예:
customWar
) - 컨텍스트 값(페이지가 사용되지 않으므로 여기서
/oam
설정) - 적어도 시도 매개변수에 대해 다음을 입력하십시오.
- initial_command = 없음
- is_rsa=참
- Apply를 누릅니다.
그림 Authentication_Schemes_Screen.png 설명
테스트
새로 생성된 인증 체계를 사용하여 인증 정책으로 리소스를 보호합니다. 그러면 사용자 정의 인증 모듈을 호출합니다. 통합 SSO 이전에는 OAM/SP에서 별칭에 대한 LDAP 사용자 레코드가 다음과 같습니다.
dn: cn=alice,ou=users,dc=us,dc=oracle,dc=com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: top
givenName: al
title: manager
uid: alice
cn: alice
sn: APPLETON
userPassword:: e1NTSEE1MTJ9TXp0R2d0Si9GT1NzYUxvRXJqZW0rM1Q2eU5QMW9ZZmZ2Y3FkVWpaS1o1OFNGMy95ZDBueUxUbnllRi83SFRtS2JmOTJ0anY4TFd6di9UanliOGw4WFNQV1BxSnF3N mail: alice@oracle.com
인증 후 IdP는 SAML 2.0 검증의 사용자 별칭에 대해 다음 정보를 전송합니다.
- SAML 속성:
- userID: 앨리스
- lastname: 애플턴
- 이름: Alice
- 샘 NameID: alice@oracle.com
통합 SSO 후 sn, givenname, uid 및 mail이 SAML 검증의 값으로 설정되도록 CustomAttributesUpdatePlugin
가 앨리스의 LDAP 레코드를 업데이트해야 합니다. OAM/SP에서 통합 SSO 작업 후 앨리스에 대한 LDAP 사용자 레코드는 다음과 같습니다.
dn: cn=alice,ou=users,dc=us,dc=oracle,dc=com
objectClass: person
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: top
givenName: Alice
title: manager
uid: alice
cn: alice
sn: Appleton
userPassword:: e1NTSEE1MTJ9TXp0R2d0Si9GT1NzYUxvRXJqZW0rM1Q2eU5QMW9ZZmZ2Y3FkVWpaS1o1OFNGMy95ZDBueUxUbnllRi83SFRtS2JmOTJ0anY4TFd6di9UanliOGw4WFNQV1BxSnF3N
mail: alice@oracle.com
추가 학습 자원
docs.oracle.com/learn의 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 접근할 수 있습니다. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer로 전환할 수 있습니다.
제품 설명서는 Oracle Help Center를 참조하십시오.
Custom Post-Authentication Module in OAM and SP
F60230-01
September 2022
Copyright © 2022, Oracle and/or its affiliates.