繁体   English   中英

如何在GlassFish中获得具有JSR 196身份验证的角色?

[英]How to get roles with JSR 196 authentification in GlassFish?

我想使用GlassFish 3中符合JSR 196的自定义身份验证模块。接口javax.security.auth.message.ServerAuth具有以下方法:

AuthStatus validateRequest(
  MessageInfo messageInfo,
  javax.security.auth.Subject clientSubject,
  javax.security.auth.Subject serviceSubject
)

AuthStatus可以是FAILURE或SUCCESS等多个常量之一。

问题是: 如何使用JSR 196从“角色数据库”中获取角色?

示例:服务器接收带有SSO令牌(例如CAS令牌)的请求,检查该令牌是否有效,并使用通过JDBC或从REST服务(通过http)从数据库中获取角色来填充远程用户对象。

角色获取是否在JSR 196的范围内? 如何实施?

我是否必须将JSR 196与JSR 115一起使用才能使用自定义身份验证和自定义角色源?

这是我的JSR-196OpenID实现中的代码示例。 该方法为当前的CallerPrincipal设置存储在字符串数组中的角色:

private boolean setCallerPrincipal(String caller, Subject clientSubject) {
            boolean rvalue = true;
            boolean assignGroups = true;
            // create CallerPrincipalCallback
            CallerPrincipalCallback cPCB = new CallerPrincipalCallback(
                            clientSubject, caller);
            if (cPCB.getName() == null && cPCB.getPrincipal() == null) {
                    assignGroups = false;
            }
            try {
                    handler.handle((assignGroups ? new Callback[] {
                                    cPCB,
                                    new GroupPrincipalCallback(cPCB.getSubject(),
                                                    assignedGroups) } : new Callback[] { cPCB }));
                    logInfo(DEBUG_JMAC, "jmac.caller_principal:" + cPCB.getName() + " "
                                    + cPCB.getPrincipal());
            } catch (Exception e) {
                    // should not happen
                    logger.log(Level.WARNING, "jmac.failed_to_set_caller", e);
                    rvalue = false;
            }
            return rvalue;
    }

我在validateRequest()方法期间调用此方法。 您可以在此处查看完整的代码: http : //code.google.com/p/openid4java-jsr196/source/browse/trunk/src/main/java/org/imixs/openid/openid4java/OpenID4JavaAuthModule.java

此页面也会对您有所帮助: http : //code.google.com/p/openid4java-jsr196/

将用户映射到角色的方法如下:

我的web.xml中有3个角色,而我的sun-web.xml中也有3个角色到组的映射,它们将这些角色映射到多个组。 然后,我有了一个数据库,其中包含表Users,该表的列名为“ group”。 该组对应于映射到角色的组。 我还将OpenID与基于JSR 196的自定义身份验证模块配合使用。 因此,基本上,每当用户登录时,都会从数据库中读取用户的组,然后由我的应用为他们分配相应的角色。 所有这些都使用J2EE的标准声明性安全模型完成。

对于我的自定义身份验证模块,我使用一个名为AuthenticRoast的库,这使事情变得更加简单。

这也是相关的帖子...

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM