获取403 Forbidden,尝试访问安全的Web服务

时间:2015-10-27 13:26:20

标签: web-services tomcat active-directory single-sign-on axis2

是否有人使用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群组

任何对某人有用的建议或指导或设置都非常有用,谢谢。

2 个答案:

答案 0 :(得分:2)

403错误表示身份验证后的权限问题。这是因为在SSO之后,服务器将检查组成员资格以查看用户是否获得了适当的权限。 403错误来自角色映射的配置部分。服务器的SSO实际上工作正常。

我们建议您尝试以下操作(以下示例使用的是5.5版本的tomcat,但对于以后的版本它将是相同的):

  • 配置tomcat for Centrify

一个。使用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.
  • 为Centrify配置webdav并使用kerberos(SPNEGO)进行身份验证

一个。将登录领域设置为CENTRIFYDC:

  1. cd /opt/apache-tomcat-5.5.25/webapps /
  2. mkdir webdav / META-INF
  3. 将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>
    
  4. 湾配置AD组到jspwiki应用程序角色的映射。

    1. cp /usr/share/centrifydc/java/templates/centrifydc.xml webdev / WEB-INF / centrifydc.xml

    2. 修改webdev / WEB-INF / centrifydc.xml中的RoleMapping部分,如下所示:

       <RoleMapping separator=";">
       <Role name="user" group="*" user="*"/>
       <Role name="@ROLE2@" group="@GROUP2@"/>
       <Role name="@ROLE3@" user="@USER3@"/> 
       </RoleMapping>
      
    3. ℃。配置web.xml以使用kerberos(SPNEGO)进行身份验证:

      1. 编辑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>
        
      2. 您还可以参考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,然后登录应用程序在进行身份验证时必须设置所有三个角色。