在 WebSphere Application Server Community Edition 中配置 Kerberos 验证
2010-02-01 00:00:00 来源:WEB开发网实体使用一个共享秘密(通常是密码)对 Authentication Server 进行验证,并接收一个 Ticket Granting Ticket (TGT)。然后它联系 Ticket Granting Server,使用 TGT 验证其身份并请求一个服务。TGS 验证该实体是否有权使用服务并发送一个 Service Ticket (ST)。该实体然后联系 Service Server (SS),使用 ST 证明自己有权利用服务,然后实际使用服务。实体能够重复使用 TGT 获取额外的 ST 以使用 SS,无需再次使用 AS 验证自己。Kerberos 协议经过特殊设计,无需在网络上传播共享秘密(如密码)就可以进行验证。使用 Kerberos 验证时,用户通常使用一个输入设备(如键盘)输入他们的凭证,而服务使用一个 Keytab 文件存储用户凭证,并使用它们对 KDC 进行验证。
Kerberos 和 Community Edition
Community Edition 不 提供 Kerberos 协议的实现。IBM Java Platform 通过 com.ibm.security.auth.module.Krb5LoginModule 类提供 Kerberos 协议的一个实现。为了利用 Java Platform 提供的 Kerberos 实现,我们创建一个包装 Krb5LoginModule 的 LoginModule 实现,并将所有 LoginModule API 调用委托给 Krb5LoginModule。KerberosLoginModule 的代码如清单 1 所示。
清单 1. KerberosLoginModule.java
package org.apache.geronimo.security.realm.providers;
import java.security.Principal;
import java.util.HashMap;
import java.util.Map;
import javax.security.auth.Subject;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.login.LoginException;
import javax.security.auth.spi.LoginModule;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class KerberosLoginModule implements LoginModule {
private static Log log = LogFactory.getLog(KerberosLoginModule.class);
private Subject subject;
private LoginModule krb5LoginModule;
private Subject krb5Subject;
private Principal addOnPrincipal;
public void initialize(Subject subject, CallbackHandler callbackHandler,
Map sharedState, Map options) {
this.subject = subject;
String krb5LoginModuleClass = (String) options.get("krb5LoginModuleClass");
try {
krb5LoginModule = (LoginModule)Class.forName(krb5LoginModuleClass)
.newInstance();
} catch (Exception e) {
log.error("Initialization failed", e);
throw new IllegalArgumentException("Unable to configure
kerberos login module: " + e.getMessage(),e);
}
Map options1 = new HashMap();
for(Object key : options.keySet()) {
String key1 = (String) key;
if(key1.startsWith("krb_")) {
options1.put(key1.substring(4), options.get(key1));
}
}
krb5Subject = new Subject();
krb5LoginModule.initialize(krb5Subject, callbackHandler, sharedState,
options1);
String addOnPrincipalClass = (String) options.get("addOnPrincipalClass");
String addOnPrincipalName = (String) options.get("addOnPrincipalName");
if(addOnPrincipalClass != null && !addOnPrincipalClass.equals("")) {
try {
addOnPrincipal = (Principal) Class.forName(addOnPrincipalClass).getConstructor
(String.class).newInstance(addOnPrincipalName);
} catch (Exception e) {
log.error("Initialization failed", e);
throw new IllegalArgumentException("Unable to configure kerberos login
module: " + e.getMessage(), e);
}
}
}
public boolean login() throws LoginException {
return krb5LoginModule.login();
}
public boolean commit() throws LoginException {
boolean result = krb5LoginModule.commit();
if(result) {
if(addOnPrincipal != null) subject.getPrincipals().add(addOnPrincipal);
subject.getPrincipals().addAll(krb5Subject.getPrincipals());
subject.getPublicCredentials().addAll(krb5Subject.getPublicCredentials());
subject.getPrivateCredentials().addAll(krb5Subject.getPrivateCredentials());
}
return result;
}
public boolean abort() throws LoginException {
return krb5LoginModule.abort();
}
public boolean logout() throws LoginException {
if(!subject.isReadOnly()) {
// Remove principals and credentials added by this LoginModule
if(addOnPrincipal != null) subject.getPrincipals().remove(addOnPrincipal);
subject.getPrincipals().removeAll(krb5Subject.getPrincipals());
subject.getPublicCredentials().removeAll(krb5Subject.getPublicCredentials());
subject.getPrivateCredentials().removeAll(krb5Subject.getPrivateCredentials());
}
return krb5LoginModule.logout();
}
}
Tags:WebSphere Application Server
编辑录入:爽爽 [复制链接] [打 印]- ››WebSphere Application Server 7.0 XML Feature P...
- ››WebSphere 反向投资者: 解决 WebSphere Applicati...
- ››WebSphere sMash 的创新应用,第 2 部分: 借助包装...
- ››Websphere MQ v6集群的负载均衡新功能
- ››WebSphere Process Server V6.0.2 集群,第 2 部分...
- ››WebSphere Process Server V6.0.2 集群,第 1 部分...
- ››WebSphere MQ性能调优浅谈
- ››WebSphere配置资源库管理
- ››WebSphere中的SSL/TLS:用法、配置和性能
- ››websphere ejb远程/本地调用总结
- ››WebSphere Application Server对SIP的支持
- ››WebSphere Process Server V6 体系结构概述
更多精彩
赞助商链接