授权
Liberty 概要文件中的授权将确定用户是否有权访问系统中的某个角色。
授权指定对资源的访问权。通常,在执行认证来确认身份之后,会执行授权。认证回答的问题是:“您就是您所声明的用户吗?”;而授权回答的问题是:“您有权执行您正在尝试执行的操作吗?”
管理功能授权
当实体尝试访问资源时,授权服务会确定该实体是否具有必需的权限来访问资源。不管实体是访问应用程序还是执行管理功能,授权服务都会执行此操作。授权访问应用程序和授权访问管理功能的主要差别在于将用户映射到角色的方式。如果是应用程序授权,请使用 server.xml 文件或 ibm-application-bnd.xml/xmi 文件中的 application-bnd 元素将用户映射至角色。如果是管理功能授权,请使用 server.xml 文件中的 administrator-role 元素将用户映射至管理员角色。有关管理安全性的更多信息,请参阅使用 JMX 来连接至 Liberty 概要文件。
应用程序授权
下图描述了应用程序授权的工作原理:

- 当实体尝试访问 Liberty 概要文件所服务的应用程序中的资源时,会执行授权。Web 容器会调用授权服务来确定在给定必需角色集(包含一个或多个必需角色)的情况下,用户是否有权访问特定资源。必需角色是由部署描述符中的 auth-constraint 元素以及 @ServletSecurity 注释所确定。
- 授权服务确定必需角色所映射到的对象。通过处理 ibm-application-bnd.xmi 文件或 ibm-application-bnd.xml 文件中以及 server.xml 文件的 application-bnd 元素中所定义的映射来完成此步骤。将合并来自这两个源的映射。如果两个源中存在同一角色,那么仅使用 server.xml 文件中的角色映射。使用 server.xml 文件将角色映射到用户的优点是您的应用程序不需要打包成 EAR 文件,并且更容易更新。此外,使用 ibm-application-bnd.xmi/xml 文件时,可以使您的应用程序移植到其他服务器,及其他不支持 server.xml 文件的完整概要文件服务器。
- 如果已将必需角色映射到 EVERYONE 特殊主体集,那么授权服务会立即返回以允许任何人访问。如果已将该角色映射至 ALL_AUTHENTICATED_USERS 特殊主体集并且已认证用户,那么授权服务会将为用户授予访问权。如果这些条件都未得到满足,那么授权服务会确定映射到必需角色的用户和组。如果用户已映射到必需角色或者用户属于映射到角色的组,那么授权服务会授予资源访问权。
- 授权服务会将结果返回到 Web 容器以指示是已授予用户访问权还是已拒绝用户访问。
特殊主体集
将实体映射到角色时,可以映射特殊主体集,而不是特定用户或组。特殊主体集是主体集概念的扩展。特殊主体集可以表示归为特定类别的用户组。
- EVERYONE:表示系统上的任何实体,这意味着任何安全性都不适用,因为每个人都可以访问,而且不会提示您输入凭证。
- ALL_AUTHENTICATED_USERS:表示向服务器成功认证的所有实体。
<application-bnd>
<security-role name="AllAuthenticated">
<special-subject type="ALL_AUTHENTICATED_USERS" />
</security-role>
</application-bnd>
访问标识和授权
对用户或组授权时,服务器需要一种方法来唯一标识该用户或组。用户和组的唯一标识可用作此用途,并且用来构建授权配置。由用户注册表实现来确定这些标识:唯一用户标识是 getUniqueUserId() 的值,唯一组标识是 getUniqueGroupId() 的值。您也可以选择在授权配置中对用户或组显式地指定访问标识。将使用这些显式访问标识,而不使用用户注册表实现所返回的值。要在 ibm-application-bnd.xml/xmi 文件或 server.xml 文件中指定访问标识(其中 application-bnd 在 application 元素下),请对 user 或 group 元素使用 access-id 属性。
<application-bnd>
<security-role name="Employee">
<user name="Bob" access-id="user:MyRealm/Bob"/>
<group name="developers" access-id="group:myRealm/developers"/>
</security-role>
</application-bnd>