【问题标题】:Seam security with external authentication具有外部身份验证的接缝安全性
【发布时间】:2010-07-01 07:31:51
【问题描述】:

我在 Weblogic 10.3.2 (11g) 上使用 Seam 2.2.1.CR1。我想使用外部 SSO(Oracle 提供的专有 SSO,基于 OID)。我想集成这个外部登录(登录屏幕属于 SSO)。请注意,我不想使用 LdapStore。如果我做对了,这将要求我通过我的应用程序有一个登录页面,然后它会以某种方式连接到 LDAP 并登录。我想使用 SSO 提供的外部登录屏幕。

一些想法

我没有看到使用此 SSO 登录的过程与使用 WebLogic 的任何 Authenticator 有什么不同。使用 SSO 和 Default Authenticator 上的 BASIC 身份验证,应用程序的结果是相同的:用户进入应用程序,并且在每个 HttpServletRequest 方法 getRemoteUser() 返回用户登录时使用的用户名(在SSO 或 BASIS 登录),并且 .isUserInRole('blah') 根据通过身份验证分配的角色返回真/假。因此,我认为这两种身份验证在编程方面完全相同。

问题

我的问题是如何将其与 Seam Security 集成。 Seam in Action 解释了如何在应用程序中包含自定义登录屏幕,该应用程序填充 Identity 组件和 Credentials 组件。然后 Seam 使用这些组件来应用高级别的安全限制,例如 s:hasRole。

但是,在我的应用程序中,我想要登录屏幕。我想要的只是能够以某种方式将 Seam Security 与我已有的一起使用:HttpServletRequest 中的角色和用户名。

我找到了这个帖子(见最后),但我不确定我是否完全理解。例如,一个问题是我是否需要扩展身份。

另一个问题是,在 Seam in Action 中,Dan Allen 说有一个登录页面是强制性的,而我不想拥有。从第 449 页开始:

只有 Seam 不知道去哪里 指示未经身份验证的用户 请求此页面是因为您 没有指定登录页面。如果一个 登录页面尚未设置,Seam 抛出 NotLoggedInException。

一般来说,我认为将外部 SSO(或任何应用程序服务器验证器)与 Seam 集成的文档仍然很少,尽管这是一个非常常见的业务需求。我想我们都会坚持到他们完成 Seam 3。

同时,有任何一般/具体的指示吗?

干杯!

-- http://seamframework.org/Community/HelpWithIdentityloginAndAcceptExternallyAuthenticatedPrincipal

【问题讨论】:

    标签: java security authentication seam single-sign-on


    【解决方案1】:

    它适用于 Seam 2.x。

    在 pages.xml 中创建一个虚假的登录视图页面。然后,使用它与一个或类似的外部登录。

    然后,添加导航规则以重定向到该导航视图中的成功/失败登录页面。

    并且您将需要覆盖身份验证方法。

    类似这样的:

    <page view-id="/fakeLogin.xhtml">
            <action execute="#{identity.login}" if="#{not identity.loggedIn}" />
            <param name="username" />
            <navigation from-action="#{identity.login}">
                    <rule if="#{identity.loggedIn}">
                            <redirect view-id="/home.xhtml"/>
                    </rule>
                    <rule if="#{not identity.loggedIn}">
                            <redirect view-id="/error.xhtml"/>
                    </rule>
            </navigation>
    </page>
    

    还有:

    @In(required = true)
    private String username;
    
    @In
    Identity identity;
    
    public boolean authenticate() {
       //...
       throw new AuthorizationException("login failed");
       //...
       return true;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      • 2015-09-04
      • 2014-04-30
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多