2012-09-13 2 views
1

Apache mod_proxy_http 및 SPNEGO를 사용하여 SSO를 성공적으로 구현했습니다. Java EE 6 웹 응용 프로그램에서는 request.getRemoteUser()를 사용하여 인증 된 사용자를 얻습니다.spnego 인증 후 glassfish LDAP 인증

이제 승인을위한 가장 좋은 방법은 무엇입니까? 우리의 목표는 LDAP를 통한 Microsoft AD에서 사용자의 특정 역할 구성원을 확인하는 것입니다. 글래스 피 3.1.2로 그걸 성취하는 가장 좋은 방법은 무엇입니까?

+0

할 수 있었습니까? 예라고 대답하는 경우 여기에 답변을 추가 하시겠습니까? –

답변

1

사용 용도에 따라 다릅니다. AD의 역할 만 알고 싶다면 LDAP에서 수동 검색을 수행 할 수 있습니다.

예 : 사용자 이름은, 예를 들어 사용자의 전체 DN되어야한다는

import javax.naming.*; 
import javax.naming.directory.*; 

public class test { 

    public String ldapUri = "ldap://localhost"; 
    public String usersContainer = "cn=users,dc=example,dc=com"; // base DN for search 
    public String username = "user"; 
    public String password = "pass"; 

    public static void main(String args[]){ 

    Hashtable env = new Hashtable(); 
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
    env.put(Context.PROVIDER_URL, ldapUri); 
    env.put(Context.SECURITY_PRINCIPAL, username); 
    env.put(Context.SECURITY_CREDENTIALS, password); 
    env.put(Context.REFERRAL, "follow"); 

    try { 
     DirContext ctx = new InitialDirContext(env); 
     SearchControls ctls = new SearchControls(); 

     String name = "your_username"; // full DN name 
     NamingEnumeration answer = ctx.search(usersContainer, "(member=" + name + ")",ctls);  

     while(answer.hasMore()) { 
       SearchResult rslt = (SearchResult)answer.next(); 
       Attributes attrs = rslt.getAttributes(); 
       System.out.println(attrs.get("cn")); 
      } 

     ctx.close(); 


    } catch (NamingException e) { 
     e.printStackTrace(); 
    }  
    } 
} 

참고 CN=user1,CN=users,DC=company,DC=com

응용 프로그램에서 이러한 그룹을 역할 할당에 사용하려면 약간 까다 롭습니다. 이를 달성하려면 사용자 정의 ServerAuthModule (예 : here)이 필요하거나 AD/LDAP의 데이터를 기반으로 역할을 할당하려면 SPNEGO 부분을 수정해야합니다.