Jboss EAP 6.3 上 Web 应用程序的 JAAS 授权
JAAS Authorization for Web Application on Jboss EAP 6.3
目前,我正在将我的 Web 应用程序从 JBoss EAP 5.2 迁移到 EAP 6.3。
该应用程序正在使用自定义领域进行授权。但是,6.3 不再支持 Realm,人们建议使用自定义的 LoginModule。我做了一些研究,发现 LoginModule 仅用于身份验证。我对么?如果LoginModule也提供Authorization服务,怎么办?如果没有,有哪些替代方法可以进行授权?
谢谢。
大卫
您的 LoginModule 应该覆盖 org.jboss.security.auth.spi.AbstractServerLoginModule
的后代之一。如果您实施或覆盖 getRoleSets()
方法,您可以将角色添加到经过身份验证的用户以进行授权。
getRoleSets()
方法 return 是一组与分配给用户的角色集相对应的组。您应该 return 一个名为 "Roles" 的组,其中包含分配给用户的角色。例如:
@Override
protected Group[] getRoleSets() throws LoginException {
Group group = new SimpleGroup("Roles");
try {
Principal p = createIdentity("ADMIN_ROLE");
group.addMember(p);
} catch (Exception e) {
LOGGER.error("Failed to create principle on login", e);
}
return new Group[] { group };
}
然后向公开的方法添加 @RolesAllowed
注释,指定允许的角色。例如:
@RequestScoped
@DenyAll
@Path("admin")
public class AdminServices {
@POST
@Path("/myAdminUri")
@Produces(MediaType.TEXT_PLAIN)
@RolesAllowed({ "ADMIN_ROLE" })
public String administerMethod(@Context HttpServletRequest req, @Context HttpServletResponse resp)
throws SomeException {
....
如果用户没有以所需角色登录,他们将被拒绝访问该方法。
编辑:
web.xml
文件还可以在 <security-constraint>
节中列出安全限制。角色名称应与 getRoleSets()
方法分配的角色匹配。
<security-constraint>
<web-resource-collection>
<web-resource-name>Secure resources</web-resource-name>
<url-pattern>/admin*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>ADMIN_ROLE</role-name>
</auth-constraint>
</security-constraint>
<security-role>
<role-name>ADMIN_ROLE</role-name>
</security-role>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>SecureRealm</realm-name>
</login-config>
Redhat site 上提供了安全参考指南(需要支持订阅)
目前,我正在将我的 Web 应用程序从 JBoss EAP 5.2 迁移到 EAP 6.3。 该应用程序正在使用自定义领域进行授权。但是,6.3 不再支持 Realm,人们建议使用自定义的 LoginModule。我做了一些研究,发现 LoginModule 仅用于身份验证。我对么?如果LoginModule也提供Authorization服务,怎么办?如果没有,有哪些替代方法可以进行授权?
谢谢。 大卫
您的 LoginModule 应该覆盖 org.jboss.security.auth.spi.AbstractServerLoginModule
的后代之一。如果您实施或覆盖 getRoleSets()
方法,您可以将角色添加到经过身份验证的用户以进行授权。
getRoleSets()
方法 return 是一组与分配给用户的角色集相对应的组。您应该 return 一个名为 "Roles" 的组,其中包含分配给用户的角色。例如:
@Override
protected Group[] getRoleSets() throws LoginException {
Group group = new SimpleGroup("Roles");
try {
Principal p = createIdentity("ADMIN_ROLE");
group.addMember(p);
} catch (Exception e) {
LOGGER.error("Failed to create principle on login", e);
}
return new Group[] { group };
}
然后向公开的方法添加 @RolesAllowed
注释,指定允许的角色。例如:
@RequestScoped
@DenyAll
@Path("admin")
public class AdminServices {
@POST
@Path("/myAdminUri")
@Produces(MediaType.TEXT_PLAIN)
@RolesAllowed({ "ADMIN_ROLE" })
public String administerMethod(@Context HttpServletRequest req, @Context HttpServletResponse resp)
throws SomeException {
....
如果用户没有以所需角色登录,他们将被拒绝访问该方法。
编辑:
web.xml
文件还可以在 <security-constraint>
节中列出安全限制。角色名称应与 getRoleSets()
方法分配的角色匹配。
<security-constraint>
<web-resource-collection>
<web-resource-name>Secure resources</web-resource-name>
<url-pattern>/admin*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>ADMIN_ROLE</role-name>
</auth-constraint>
</security-constraint>
<security-role>
<role-name>ADMIN_ROLE</role-name>
</security-role>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>SecureRealm</realm-name>
</login-config>
Redhat site 上提供了安全参考指南(需要支持订阅)