27 Mayıs 2008 Salı

Web Servis, HTTP Authentication ve LDAP

NetBeans 6.1 ile Glassfish üzerinde geliştirilen web servisleri için HTTP authentication ve LDAP kullanmak istediğimizde yapmamız gerekenler şu şekildedir.

Öncelikle Glassfish Admin Console ile bir ldap realm tanımlıyoruz.

Admin console da Configuration > Security > Realms de New ile yeni bir Realm tanımla.
Name: ldapRealmName (herhangi birsey olabilir, web.xml de kullanılacak.)
ClassName: com.sun.enterprise.security.auth.realm.ldap.LDAPRealm

ClassName seçilince JAAS context otomatik olarak ldapRealm gelir.
Directory: ldap sunucu adresi
Base DN: cn=Users,dc=xxxx,dc=com,dc=tr

Ek olarak aşağıdakiler tanımlanır.
search-filter: sAMAccountName=%s
group-base-dn: cn=Groups, dc=xxxx,dc=com,dc=tr
search-bind-password: şifre
group-search-filter: member=%d
search-bind-dn: cn:Administrator,cn=Users,dc=xxxx,dc=com,dc=tr

Bu tanımladığımız ldap realm web.xml de login config ayarlarında kullanılacak.

Web servisinin geliştirildiği web uygulamasında yapılması gerekenler:
web.xml üzerinde yapmamız gereken eklemeler:


<security-constraint>

<display-name>MyConstraint</display-name>
<web-resource-collection>
<web-resource-name>myresource</web-resource-name>
<description/>
<url-pattern>/*</url-pattern>
<http-method>POST</http-method>
<http-method>HEAD</http-method>
<http-method>PUT</http-method>
<http-method>OPTIONS</http-method>
<http-method>TRACE</http-method>
<http-method>DELETE</http-method>
</web-resource-collection>
<auth-constraint>
<description>MyDescription</description>
<role-name>AuthRole </role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>ldapRealmName</realm-name>
</login-config>
<security-role>
<description/>
<role-name>AuthRole</role-name>
</security-role>

sun-web.xml üzerindeki değişiklikler:

<security-role-mapping>

<role-name>AuthRole </role-name>
<group-name>User</group-name>
</security-role-mapping>

Buradaki GrupAdı Ldap ta tanımlanan grup adı olmalıdır. Uygulamaya erişim için kullanılacak kullanıcılar bu grup üyesi olarak tanımlanmalıdır.

Bu web servisinin client ını yazarken, tek yapmamız gereken kullanıcı adı ve şifre göndermek. Web servisini çağırdığınız yere aşağıdaki kod parçasını ekleyebilirsiniz.
((BindingProvider)port).getRequestContext().put( BindingProvider.USERNAME_PROPERTY, "kullanıcıAdı");
((BindingProvider)port).getRequestContext().put( BindingProvider.PASSWORD_PROPERTY, "şifre");


Hiç yorum yok: