Apigee Edge 문서입니다.
Go to the
Apigee X 문서로 이동합니다. info
대상
LDAP 정책은 다음을 제공합니다.
- 인증: 요청에 제공된 사용자 인증 정보가 LDAP 프로바이더의 인증 정보와 비교하여 검증됩니다. LDAP 정책은 인증에 많은 유연성을 제공하므로 원하는 DN 값이 요청에 없더라도 비밀번호와 함께 DN 값을 사용할 수 있습니다. 예를 들어 인증에 이메일 / 비밀번호를 사용해야 한다고 가정해 보겠습니다. 다음 옵션을 사용할 수 있습니다.
- 이메일이 요청에 있는 경우 LDAP 인증에 비밀번호와 함께 이메일을 사용하면 됩니다.
- 이메일이 요청에 없지만 다른 DN 속성 (예: 전화번호)이 있는 경우 전화번호를 사용하여 LDAP에서 해당 이메일을 가져온 후 이메일/ 비밀번호를 사용하여 인증할 수 있습니다.
- 고유 이름 (DN) 검색: 인증 외에도 LDAP 정책을 사용하여 요청에서 이메일과 같은 사용자 속성을 식별하고 해당 사용자의 LDAP에서 다른 DN 속성을 가져오는 쿼리를 실행할 수 있습니다. 가져온 DN은 변수에 저장됩니다.
보호된 리소스에 대한 액세스를 LDAP 제공업체의 사용자(예: 관리 사용자, 조직 사용자, 개발자)로 제한해야 하는 경우, 특히 OAuth 토큰 액세스가 불필요하거나 너무 무거운 경우 LDAP 정책을 사용합니다. 이 정책은 API 프록시 흐름에서 사용할 도메인 이름 메타데이터를 가져오도록 설계되었습니다.
예를 들어 사용자가 LDAP에 대해 인증에 성공한 경우에만 API 호출을 실행하도록 할 수 있습니다. 그런 다음 인증이 성공한 후 선택적으로 사용자의 DN (도메인 이름) 속성을 가져올 수 있습니다.
자세한 내용은 다음을 참조하세요.
샘플
사용자 이름/비밀번호 인증
<Ldap name="4GLdapPolicy">
<LdapResource>ldap1</LdapResource>
<Authentication>
<UserName ref="request.header.username"/>
<Password ref="request.header.password"/>
<Scope>subtree</Scope>
<BaseDN ref="apigee.baseDN"></BaseDN> <!-- default is dc=apigee,dc=com -->
</Authentication>
</Ldap>이 샘플은 LDAP 제공업체에 대한 인증을 제공합니다. 이 정책은 인증을 위해 요청의 사용자 이름 과 비밀번호를 LDAP로 전달합니다.
DN 속성 인증
<Ldap name="LdapPolicy">
<LdapResource>ldap1</LdapResource>
<Authentication>
<Password ref="request.header.password"/>
<SearchQuery>mail={request.header.mail}</SearchQuery>
<Scope>subtree</Scope>
<BaseDN ref="apigee.baseDN"></BaseDN> <!-- default is dc=apigee,dc=com -->
</Authentication>
</Ldap>이 정책은 요청 헤더의 이메일로 사용자의 DN을 가져온 다음 요청 헤더에 제공된 비밀번호로 LDAP에 대해 사용자를 인증합니다.
LDAP 검색
<Ldap name="LdapPolicy"> <!-- using a custom LDAP provider --> <LdapConnectorClass>com.custom.ldap.MyProvider</LdapConnectorClass> <LdapResource>MyLdap</LdapResource> <Search> <BaseDN ref="apigee.baseDN"></BaseDN> <!-- default is dc=apigee,dc=com --> <SearchQuery>mail={request.header.mail}</SearchQuery> <Attributes> <Attribute>address</Attribute> <Attribute>phone</Attribute> <Attribute>title</Attribute> </Attributes> <Scope></Scope> <!-- default is ‘subtree’ --> </Search> </Ldap>
이 정책은 커스텀 LDAP 제공업체를 참조합니다. 요청 헤더의 이메일 주소를 사용하여 사용자를 식별한 다음 LDAP에서 사용자의 주소, 전화번호, 직함을 가져옵니다. 가져온 DN 속성은 변수에 저장됩니다. '정책별 변수'를 참조하세요.
LDAP를 검색하고 DN 속성을 가져오려면 요청에 관리자 인증 정보가 포함되어야 합니다.
요소 참조
다음은 LDAP 정책 요소 및 속성에 대한 설명입니다.
|
요소 |
설명 |
|---|---|
|
|
정책 이름을 입력할 수 있는 이름 속성이 있는 상위 요소입니다. |
|
|
Apigee에서 제공하지 않는 커스텀 LDAP
제공업체와 함께 LDAP 정책을 사용하는 경우 정규화된 LDAP 커넥터 클래스를 지정합니다.
Apigee의 |
|
|
LDAP 리소스의 환경 이름을 입력합니다. 자세한 내용은 Create an LDAP 리소스 만들기를 참조하세요. |
|
|
모든 데이터가 존재하는 LDAP의 기본 수준입니다. 예를 들어
Apigee의 LDAP 제공업체에서 모든 데이터는
|
|
|
|
|
인증 |
|
|
|
구현하는 인증 동작의 상위 요소입니다. |
|
|
다음 속성 중 하나를 사용하는 빈 요소입니다.
사용자 이름으로 인증하지 않거나 사용자 이름이 요청에 포함되지 않은 경우 이 요소를 포함할 필요가 없습니다. 사용자 이름이 요청에 있지만 사용자 이름이 아닌 DN 속성
(예: 이메일)으로 사용자를 인증하려면 |
|
|
다음 속성 중 하나를 사용하는 빈 요소입니다.
|
|
|
사용자 이름이 아닌 DN 속성(예: 이메일)을 사용하여 인증하려면 요청에서 DN 속성(예: 사용자 이름)을 가져오도록 LDAP 정책을 구성합니다. 이 DN 속성은 LDAP에서 사용자를 식별하고 이메일을 가져오고 사용자를 인증하는 데 사용됩니다. 예를 들어 LDAP에서 이메일 주소를 저장하기 위한 'mail' 속성을 정의한다고 가정해 보겠습니다.
|
|
검색 |
|
|
|
구현하는 검색 행동의 상위 요소입니다. |
|
|
요청 또는 응답의 메타데이터로 사용자를 식별하면 이
요소를 사용하여 LDAP에서 사용자의 추가 DN 속성을 가져올 수 있습니다. 예를 들어 요청에 사용자 이메일이 포함되어 있고 LDAP에서 사용자 이메일 주소를 저장하기 위한
이 쿼리는 요청의 이메일과 일치하는 이메일을 LDAP에서 검색하며 이제 정책은 Attributes 요소를 사용하여 해당 사용자의 추가 DN 속성을 가져올 수 있습니다. |
|
|
하나 이상의 예를 들어 속성 값은 LDAP에 정의된 DN 속성 이름입니다. <Attributes> <Attribute>address</Attribute> <Attribute>phone</Attribute> <Attribute>title</Attribute> </Attributes> |
사용 참고사항
프라이빗 클라우드용 Apigee Edge를 사용하면 API 호출에서 LDAP 제공업체를 활용할 수 있습니다. LDAP 정책을 사용하면 애플리케이션이 LDAP에 저장된 사용자에 대해 사용자 인증 정보를 인증할 수 있으며 LDAP에서 고유 이름(DN)을 가져올 수 있습니다. DN은 각 사용자와 연결된 메타데이터 또는 속성(예: 이메일, 주소, 전화번호)입니다. 반환된 DN은 API 프록시에서 추가로 사용할 수 있도록 변수에 저장됩니다.
LDAP 리소스 만들기
LDAP 정책은 Apigee Edge에서 만드는 LDAP 리소스를 활용합니다. LDAP 리소스 는 LDAP 저장소에 대한 연결 정보를 제공합니다.
LDAP 리소스를 만들고 관리하려면 다음 API 및 페이로드를 사용하세요.
API
LDAP 리소스 만들기 (POST) 또는 모든 LDAP 리소스 나열 (GET):
/v1/organizations/org_name/environments/environment/ldapresources
LDAP 리소스의 세부정보 가져오기 (GET), 업데이트 (POST), 삭제 (DELETE):
/v1/organizations/org_name/environments/environment/ldapresources/ldap_resource_name
페이로드
다음은 사용 주석이 포함된 샘플 XML 페이로드입니다.
<LdapResource name="ldap1"> <Connection> <Hosts> <!-- port is optional: defaults to 389 for ldap:// and 636 for ldaps:// --> <Host port="636">foo.com</Host> </Hosts> <SSLEnabled>false</SSLEnabled> <!-- optional, defaults to false --> <Version>3</Version> <!-- optional, defaults to 3--> <Authentication>simple</Authentication> <!-- optional, only simple supported --> <ConnectionProvider>jndi|unboundid</ConnectionProvider> <!-- required --> <ServerSetType>single|round robin|failover</ServerSetType> <!-- not applicable for jndi --> <!-- If using a custom LDAP provider, the fully qualified class: --> <LdapConnectorClass>com.custom.ldap.MyProvider</LdapConnectorClass> </Connection> <ConnectPool enabled="true"> <!-- enabled is optional, defaults to true --> <Timeout>30000</Timeout> <!-- optional, in milliseconds; if not set, no timeout --> <Maxsize>50</Maxsize> <!-- optional; if not set, no max connections --> <Prefsize>30</Prefsize> <!-- optional; if not set, no pref size --> <Initsize></Initsize> <!-- optional; if not set, defaults to 1 --> <Protocol></Protocol> <!-- optional; if not set, defaults to 'ssl plain' --> </ConnectPool> <Admin> <DN>cn=manager,dc=apigee,dc=com</DN> <Password>secret</Password> </Admin> </LdapResource>
curl 예: LDAP 리소스 만들기
다음 예에서는 ldap1 이라는 LDAP 리소스를 만듭니다.
curl -X POST -H "Content-Type: application/xml" \ https://api.enterprise.apigee.com/v1/organizations/myorg/environments/test/ldapresources \ -u apigee_email:password -d \ '<LdapResource name="ldap1"> <Connection> <Hosts> <Host>foo.com</Host> </Hosts> <SSLEnabled>false</SSLEnabled> <Version>3</Version> <Authentication>simple</Authentication> <ConnectionProvider>unboundid</ConnectionProvider> <ServerSetType>round robin</ServerSetType> </Connection> <ConnectPool enabled="true"> <Timeout>30000</Timeout> <Maxsize>50</Maxsize> <Prefsize>30</Prefsize> <Initsize></Initsize> <Protocol></Protocol> </ConnectPool> <Admin> <DN>cn=manager,dc=apigee,dc=com</DN> <Password>secret</Password> </Admin> </LdapResource>'
응답 코드
다음은 정책이 성공 또는 실패에 대해 반환하는 HTML 응답 코드입니다.
- 성공: 200
- 실패: 401
프라이빗 클라우드용 Edge에서 커스텀 LDAP 제공업체 사용
커스텀 LDAP 제공업체 사용
프라이빗 클라우드용 Apigee Edge에는 LDAP 정책과 상호작용하도록 이미 구성된 LDAP 제공업체가 함께 제공됩니다. 그러나 커스텀 LDAP 제공업체를 사용하는 경우 LDAP 정책을 지원하도록 제공업체를 사용 설정해야 합니다. 다음 단계를 따르세요.
- LDAP 제공업체 클래스에서
ExternalLdapConProvider인터페이스를 구현합니다.public interface ExternalLdapConProvider { void doAuthentication(LdapBean LlapBean, String userDN, String password, String baseDN); void doSearchAndAuthentication(LdapBean LlapBean, String password, String baseDN, String query, int scope); Collection<Map<String, String[]>> doSearch(LdapBean LlapBean, String query, String baseDN, Collection<String> requiredAttributes, int scope); void closeConnections(); } - 정책 구성의
<LdapConnectorClass>(다음 섹션)에 커스텀 LDAP 제공업체의 정규화된 클래스 이름을 추가합니다. - 이 파일 custom-ldap.jar_.zip을 다운로드합니다. (마우스 오른쪽 버튼을 클릭하고 다른 이름으로 저장 을 선택해야 할 수도 있습니다.)
- 압축을 풉니다.
- 환경에 custom-ldap.jar 파일을 추가하고 클래스 경로에 있는지 확인합니다.
- LDAP 제공업체의 환경 리소스를 만듭니다. LDAP 정책의
<LdapResource>요소에서 환경 리소스 이름를 사용합니다.
Java용 UnboundID LDAP SDK 사용
LDAP 정책과 함께 UnboundID LDAP SDK를 사용할 수 있지만 먼저 버전 2.3.1을 다운로드하여 각 메시지 프로세서의 클래스 경로에 추가해야 합니다.
LDAP 정책과 함께 UnboundID LDAP SDK를 사용하려면 다음 단계를 따르세요.
- 브라우저를 열고 UnboundID LDAP SDK의 Sourceforge 파일 저장소로 이동합니다.
https://sourceforge.net/projects/ldap-sdk/files/
- SDK의 버전 2.3.1 (SE 또는 Standard Edition)을 찾아 해당 버전의 ZIP 파일 을 다운로드합니다. 예를 들어 'unboundid-ldapsdk-2.3.1-se.zip'을 다운로드합니다.
- 다음 예와 같이 SDK ZIP 파일에서 JAR 파일을 추출합니다.
unzip -j -d ~/tmp ~/Downloads/unboundid-ldapsdk-2.3.1-se.zip unboundid-ldapsdk-2.3.1-se/unboundid-ldapsdk-se.jar
이 명령어는 JAR 파일만 ~/tmp 디렉터리에 추출합니다. 선택사항이지만
-j로 디렉터리 구조를 삭제합니다. - 각 메시지 프로세서 노드에서 다음 단계를 따르세요.
- JAR 파일을 메시지 프로세서의
/opt/apigee/edge-gateway/lib/thirdparty디렉터리에 복사합니다. - 필요한 경우 메시지 프로세서가 JAR 파일에 액세스할 수 있도록 Apigee 사용자 권한을 부여합니다.
- 메시지 프로세서를 다시 시작합니다.
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Edge는
/opt/apigee/edge-gateway/lib/thirdparty디렉터리의 모든 서드 파티 라이브러리를 클래스 경로에 추가합니다. - JAR 파일을 메시지 프로세서의
흐름 변수
다음은 SearchQuery로 채워지는 LDAP 정책 변수입니다.
|
변수 |
설명 |
|---|---|
ldap.policyName.execution.success |
정책이 실행된 후 이 흐름 변수는 결과에 따라 "true" 또는 "false" 값을 포함합니다. |
ldap.policyName.search.result[index]. attribute.attrName[index]=value |
이 변수의 유연한 형식(특히 색인)은 여러 속성과 여러 값이 있는 속성을 고려합니다. 색인은 1부터 시작하는 숫자입니다. 색인 번호가 제공되지 않으면 기본 색인 번호는 1입니다. 정책이 주소, 전화번호, 이메일을 반환하는 경우 다음 변수를 사용하여 첫 번째 속성 및 값을 가져올 수 있습니다. ldap.policyName.search.result.attribute.address ldap.policyName.search.result.attribute.phone ldap.policyName.search.result.attribute.email 검색 결과에서 세 번째 주소 속성을 가져오려면 다음을 사용합니다: ldap.policyName.search.result[3].attribute.address 속성에 여러 값이 있는 경우 (예: 사용자에게 여러 이메일 주소가 있는 경우) 다음과 같이 결과에서 두 번째 이메일 주소를 가져옵니다. ldap.policyName.search.result.attribute.mail[2] |
오류 코드
Edge 정책에서 반환되는 오류는 오류 코드 참조에 설명된 일정한 형식을 따릅니다.
이 정책은 다음 오류 코드를 사용합니다.
| 오류 코드 | 메시지 |
|---|---|
InvalidAttributeName |
Invalid attribute name {0}. |
InvalidSearchBase |
Search base can not be empty. |
InvalidValueForPassword |
Invalid value for password field. It can not be empty. |
InvalidSearchScope |
Invalid scope {0}. Allowed scopes are {1}. |
InvalidUserCredentials |
Invalid user credentials. |
InvalidExternalLdapReference |
Invalid external ldap reference {0}. |
LdapResourceNotFound |
Ldap resource {0} not found. |
BaseDNRequired |
Base DN required. |
OnlyReferenceOrValueIsAllowed |
Only value or reference is allowed for {0}. |
AttributesRequired |
At least one attribute required for search action. |
UserNameIsNull |
User name is null. |
SearchQueryAndUserNameCannotBePresent |
Both search query and username can not be present in the authentication action.
Please specify either one of them. |