是否有人使用Active Directory凭据而非应用程序特定的用户名/密码成功保护了Web服务?
我有一个应用程序,它与使用Axis2 1.5.1编写并部署在Tomcat 6.0.24上的Web服务进行对话,部署在Linux,FWIW上。
我已将Tomcat从JDBCRealm(针对数据库进行身份验证)更改为JAASRealm,配置为使用Centrify(客户端首选解决方案)访问AD。
这适用于Web应用程序,但对于Web服务,我得到403响应。
我使用简单的Axis2服务(使用Axis2 1.5.1编写)进行了测试,并针对Tomcat 6.0.24和7.0.63进行了部署。我也尝试过使用Axis2 1.6.2编写的Web服务。我在每种情况下得到相同的结果。我正在使用浏览器BTW进行测试。当服务工作时,我得到xml;如果不是,我就会收到错误。
我想知道是否需要更改axis2.xml中的内容,因为即使https://tomcat:8443/HelloWorld
(我的服务名为HelloWorld)也会生成403。
一些配置细节...
我已将server.xml中的域更改为以下
<Realm className="org.apache.catalina.realm.JAASRealm"
appName="CENTRIFYDC"
roleClassName="com.centrify.dc.tomcat.RolesPrincipal"
userClassName="com.centrify.dc.tomcat.LoginPrincipal" />
<Valve className="com.centrify.dc.tomcat.ContextValve" />
在web.xml中我添加了
<security-constraint>
<display-name>Security Web Service</display-name>
<web-resource-collection>
<web-resource-name>Secured Area</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>USER</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>SPNEGO</auth-method>
<realm-name>CENTRIFYDC</realm-name>
</login-config>
<!-- Security roles referenced by this web application -->
<security-role>
<role-name>USER</role-name>
</security-role>
我已将USER角色映射到我的某个AD群组
任何对某人有用的建议或指导或设置都非常有用,谢谢。
答案 0 :(得分:2)
403错误表示身份验证后的权限问题。这是因为在SSO之后,服务器将检查组成员资格以查看用户是否获得了适当的权限。 403错误来自角色映射的配置部分。服务器的SSO实际上工作正常。
我们建议您尝试以下操作(以下示例使用的是5.5版本的tomcat,但对于以后的版本它将是相同的):
一个。使用configure.pl配置tomcat for Centrify:
cd /usr/share/centrifydc/java
./configure.pl
Enter /opt/apache-tomcat-5.5.25 when prompted for the tomcat directory.
Enter /usr/jdk1.5.0_15 when prompted for the java directory.
Enter y when prompted if you want to configure Tomcat for SSL
Enter n when prompted if you want to configure Tomcat for SSL communication with ADFS server
Take default for everything else.
一个。将登录领域设置为CENTRIFYDC:
将webdav / META-INF / context.xml创建为:
<Context path="/webdav">
<Realm className="org.apache.catalina.realm.JAASRealm"
appName="CENTRIFYDC"
roleClassNames="com.centrify.dc.tomcat.RolesPrincipal"
userClassNames="com.centrify.dc.tomcat.LoginPrincipal"/>
<Valve className="com.centrify.dc.tomcat.ContextValve"/> </Context>
湾配置AD组到jspwiki应用程序角色的映射。
cp /usr/share/centrifydc/java/templates/centrifydc.xml webdev / WEB-INF / centrifydc.xml
修改webdev / WEB-INF / centrifydc.xml中的RoleMapping部分,如下所示:
<RoleMapping separator=";">
<Role name="user" group="*" user="*"/>
<Role name="@ROLE2@" group="@GROUP2@"/>
<Role name="@ROLE3@" user="@USER3@"/>
</RoleMapping>
℃。配置web.xml以使用kerberos(SPNEGO)进行身份验证:
编辑web.xml并添加
<login-config>
<auth-method>SPNEGO</auth-method>
<realm-name>Default</realm-name>
</login-config>
<!--
OPTIONAL: Add CentrifyFilter to set the authenticated user's attributes
such as group membership in HTTP headers. You must also configure the
<SetHeaders> element in centrifydc.xml to set user attributes in HTTP
headers.
This filter is not needed if you do not want the authenticated
user's attributes set in HTTP headers.
-->
<filter>
<filter-name>CentrifyFilter</filter-name>
<filter-class>com.centrify.dc.wbase.DCFilter</filter-class>
</filter>
<!--
OPTIONAL: Apply (map) CentrifyFilter to the url patterns in the
<security-constraint> section of this application to set the
authenticated user's attributes in HTTP headers.
This <filter-mapping> is not needed if you do not want the
authenticated user's attributes set in HTTP headers.
-->
<filter-mapping>
<filter-name>CentrifyFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<security-constraint>
<web-resource-collection>
<web-resource-name>ProtectedResource</web-resource-name>
<url-pattern>/index.html</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>user</role-name>
</auth-constraint>
</security-constraint>
<security-role>
<description>
An test role
</description>
<role-name>user</role-name>
</security-role>
您还可以参考Centrify Java指南第135页,了解配置如下的角色映射示例:
可扩展标记语言(XML)文件,例如centrifydc.xml文件,是结构化文档,其包含以开始和结束角度(&lt;&gt;)括号括起来的一组支持元素。根据应用的要求,元素可以是必需的或可选的。以下是离心机文件中定义的关键元素的示例:
<Centrifydc>
<enableAuthSchemes>Negotiate,NTLM,Basic</enableAuthSchemes>
<adclientSocket>/var/centrifydc/daemon</adclientSocket>
<RoleMapping>
<Role name=”role1” group=”arcade.com/Users/Sales”/>
</RoleMapping>
</Centrifydc>
虽然模板centrifydc.xml文件包含一些默认设置,但应在您放置在应用程序的WEB-INF目录中的centrifydc.xml文件的副本中修改这些默认设置。下表描述了您可以在centrifydc.xml文件中设置的元素。
如果您需要任何进一步的帮助,请随时直接联系Centrify技术支持。
答案 1 :(得分:0)
有几个问题。第一个是server.xml文件中的错误。 JAASRealms可以接受角色和用户的几个类,因此属性为roleClassName s 和userClassName s ,如下所示
<Realm className="org.apache.catalina.realm.JAASRealm"
appName="CENTRIFYDC"
roleClassNames="com.centrify.dc.tomcat.RolesPrincipal"
userClassNames="com.centrify.dc.tomcat.LoginPrincipal" />
第二个问题是使用多个使用不同授权的应用程序。首次验证应用程序时,centrifydc.xml文件会映射角色。但是,如果启用了org.apache.catalina.authenticator.SingleSignOn,则仅为执行身份验证的应用程序设置角色。此后,仅设置在身份验证应用程序的centrifydc.xml文件中设置的角色。其他应用程序将看到用户已经过身份验证但没有必要的授权,并因403错误而失败。
在不同的应用程序中,使用角色user,USER和manager,然后登录应用程序在进行身份验证时必须设置所有三个角色。