Weblogic 12.2.1.2安全领域进行身份验证,但对isUserInRole的调用返回false。

时间:2018-11-20 17:57:18

标签: java authentication java-ee weblogic jsf-2.2

我有一个正在使用的Java Web应用程序正在通过使用SSO(SPNEGO)令牌进行身份验证。在Multitenancy WebLogic Server(12.2.1.2)中设置了安全领域和提供程序,并且除调用isUserInRole之外,其他一切似乎都正常运行。它总是返回false。正在对用户进行身份验证,正在创建主题,并使用AD中的所有正确主体(组)填充主题。 我尝试将Principals映射到weblogic.xml文件中的安全角色分配,并在web.xml中使用该角色分配尝试将角色映射到特定的Principal(组),但是它不起作用,正如我认为的那样

该应用程序由WAR中的一个servlet组成,如果身份验证成功,该servlet应该在屏幕上显示登录信息。身份验证成功,并显示信息,我可以从AD和我所属的所有主体(组)中看到我的名字。

weblogic.xml和web.xml的配置如下。

weblogic.xml

  <security-role-assignment>
    <role-name>SITE_ADMIN</role-name>
    <principal-name>@DEV_ADMIN</principal-name>
    <principal-name>DEV_ADMIN</principal-name>
</security-role-assignment>

web.xml

<servlet>
     <servlet-name>AuthSimpleTestServlet</servlet-name>
     <servlet-class>functional.test.SimpleTestServlet</servlet-class>
 </servlet>
 <servlet-mapping>
     <servlet-name>AuthSimpleTestServlet</servlet-name>
     <url-pattern>/*</url-pattern>
 </servlet-mapping>
 <security-constraint>
    <web-resource-collection>
        <web-resource-name>secured pages</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>SITE_ADMIN</role-name>
    </auth-constraint>
    <user-data-constraint>
        <transport-guarantee>NONE</transport-guarantee>
    </user-data-constraint>
</security-constraint>
 <login-config>
    <auth-method>CLIENT-CERT</auth-method>
    <realm-name>myrealm</realm-name>
</login-config>
<security-role>
    <description>Admin Role</description>
    <role-name>SITE_ADMIN</role-name>
</security-role>

当我使用浏览器测试身份验证时,我便已通过身份验证,并且servlet显示我的用户名,所有主体和一些其他信息,就像我已经通过身份验证时一样。

请求的URL: http://dev-server:7011/CHAD/SPNEGO_TEST

请求信息:

请求方法:GET

请求URI:/ CHAD / SPNEGO_TEST

请求协议:HTTP / 1.1

Servlet路径:

路径信息:

路径翻译:

查询字符串:

内容长度:

内容类型:

服务器名称:dev-server

服务器端口:7011

远程用户:DCConway

方案:http

授权方案:CLIENT_CERT

请求方案:http

请求主体:DCConway

尝试使用HttpServletRequest.authenticate进行身份验证:true

HttpServletRequest.isUserInRole(SITE_ADMIN):false

Weblogic用户名-> weblogic.security.SubjectUtils.getUsername(Subject):DCConway

该学科的负责人数量:47

主体列表:(为帖子编辑的列表)

DCConway

DEV_ADMIN

@DEV_ADMIN

请求标头:

接受:text / html,application / xhtml + xml,image / jxr, /

接受语言:美国

用户代理:Mozilla / 5.0(Windows NT 10.0

WOW64

Trident / 7.0

rv:11.0)像壁虎

接受编码:gzip,deflate,peerdist

主机:dev-server:7011

DNT:1

连接:保持活动

Cookie:JSESSIONID = YAAx-omzQbMg4jE-bedCM-5Guwngj56xAmXVIqhcbFSJxti7Ae6J!2096529829

授权:协商YIILJAYG .....

X-P2P-PeerDist:版本= 1.1

X-P2P-PeerDistEx:MinContentInformation = 1.0,MaxContentInformation = 2.0

请求属性:

weblogic.servlet.network_channel.port:type = java.lang.Integer str ='7011'

在通过身份验证的结果中,我可以看到使用servlet请求来获取远程用户是可行的。我可以看到使用Principal来获取用户名是可行的。使用servlet请求调用身份验证是可行的,并且我可以看到我的所有主体。我现在不知所措,试图找出为什么对isUserInRole的调用未返回true。我猜想从角色映射到委托人的某些内容是不正确的,但我还看不到我搞砸了。

我想我可以使用这些原理来使安全性起作用并基于这些原理来限制用户的安全性,但是我真的很想知道弄乱映射的内容和位置,或者是因为在AD中没有定义任何角色组。任何解释都将不胜感激。

0 个答案:

没有答案