Liberty:授权

Liberty 中的授权将确定用户是否有权访问系统中的某个角色。

授权指定对资源的访问权。通常,在执行认证来确认身份之后,会执行授权。认证回答的问题是:“您就是您所声明的用户吗?”;而授权回答的问题是:“您有权执行您正在尝试执行的操作吗?”

管理功能授权

当实体尝试访问资源时,授权服务会确定该实体是否具有必需的权限来访问资源。不管实体是访问应用程序还是执行管理功能,授权服务都会执行此操作。授权访问应用程序和授权访问管理功能的主要差别在于将用户映射到角色的方式。如果是应用程序授权,请使用 server.xml 文件或 ibm-application-bnd.xml/xmi 文件中的 application-bnd 元素将用户映射至角色。如果是管理功能授权,请使用 server.xml 文件中的 administrator-role 元素将用户映射至管理员角色。有关管理安全性的更多信息,请参阅使用 JMX 连接至 Liberty

应用程序授权

下图描述了应用程序授权的工作原理:

图 1. 授权过程概述授权服务会在应用程序配置文件和服务器配置文件中检查角色到用户的映射,然后向访问请求授权或拒绝访问请求。
  1. 当实体尝试访问 Liberty 所服务的应用程序中的资源时,会执行授权。Web 容器会调用授权服务来确定在给定必需角色集(包含一个或多个必需角色)的情况下,用户是否有权访问特定资源。必需角色是由部署描述符中的 auth-constraint 元素以及 @ServletSecurity 注释所确定。
  2. 授权服务确定必需角色所映射到的对象。通过处理 ibm-application-bnd.xmi 文件或 ibm-application-bnd.xml 文件中以及 server.xml 文件的 application-bnd 元素中所定义的映射来完成此步骤。将合并来自这两个源的映射。如果两个源中存在同一角色,那么仅使用 server.xml 文件中的角色映射。使用 server.xml 文件将角色映射到用户的优势是您的应用程序不需要打包成 EAR 文件,并且更容易更新。此外,使用 ibm-application-bnd.xmi/xml 文件时,可以使您的应用程序移植到其他服务器,及其他不支持 server.xml 文件的WebSphere® Application Server 传统版服务器。
  3. 如果已将必需角色映射到 EVERYONE 特殊主体集,那么授权服务会立即返回以允许任何人访问。如果已将该角色映射至 ALL_AUTHENTICATED_USERS 特殊主体集并且已认证用户,那么授权服务会将为用户授予访问权。如果这些条件都未得到满足,那么授权服务会确定映射到必需角色的用户和组。如果用户已映射到必需角色或者用户属于映射到角色的组,那么授权服务会授予资源访问权。
  4. 授权服务会将结果返回到 Web 容器以指示是已授予用户访问权还是已拒绝用户访问。

特殊主体集

将实体映射到角色时,可以映射特殊主体集,而不是特定用户或组。特殊主体集是主体集概念的扩展。特殊主体集可以表示归为特定类别的用户组。

可以使用下列两种特殊主体集:
  • EVERYONE:表示系统上的任何实体,这意味着任何安全性都不适用,因为每个人都可以访问,而且不会提示您输入凭证。
  • ALL_AUTHENTICATED_USERS:表示向服务器成功认证的所有实体。
要将特殊主体集映射至用户,请更新 ibm-application-bnd.xmi/xml 文件或 server.xml 文件,其中 application-bndapplication 元素下。在此示例中,名为 AllAuthenticated 的角色映射至特殊主体集 ALL_AUTHENTICATED_USERS
    <application-bnd>
           <security-role name="AllAuthenticated">
               <special-subject type="ALL_AUTHENTICATED_USERS" />
           </security-role>
       </application-bnd>

请参阅在 Liberty 中为应用程序配置授权

访问标识和授权

对用户或组授权时,服务器需要一种方法来唯一标识该用户或组。用户和组的唯一标识可用作此用途,并且用来构建授权配置。由用户注册表实现来确定这些标识:唯一用户标识是 getUniqueUserId() 的值,唯一组标识是 getUniqueGroupId() 的值。您也可以选择在授权配置中对用户或组显式地指定访问标识。将使用这些显式访问标识,而不使用用户注册表实现所返回的值。要在 ibm-application-bnd.xml/xmi 文件或 server.xml 文件中指定访问标识(其中 application-bndapplication 元素下),请对 usergroup 元素使用 access-id 属性。

在此示例中,会对用户 Bob 和组 developers 指定访问标识:
    <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>
注: access-id 属性用于授权检查。如果未指定此属性,那么系统从通过使用该用户或组名配置的注册表确定此属性。但是,用户或组不属于活动注册表时,必须按示例中所示指定 access-id 属性。例如,使用程序化登录时。

OAuth

OAuth 是有关委派授权的开放式标准。使用 OAuth 授权框架,用户可以授予第三方应用程序对使用其他 HTTP 服务来存储的信息的访问权,而不必共享其访问许可权或全部数据。有关可以如何在 Liberty 中使用 OAuth 进行授权的更多信息,请参阅 OAuth 文档。

未提供角色映射绑定时的应用程序授权

如果未提供受保护应用程序的角色映射绑定信息,那么缺省授权引擎将使用保护资源的角色名称作为与该角色相关联的组名。例如,如果角色名称为管理者,那么属于管理者组的用户有权访问该资源。这仅当 server.xml 或应用程序绑定文件中没有为应用程序指定任何应用程序绑定信息时才适用:例如,添加此绑定将禁用组绑定的安全角色:
<application type="war" id="myapp" name="myapp" location="${server.config.dir}/apps/myapp.war">
      <application-bnd>
	     <security-role name="anyAppRoleName"/>
      </application-bnd>
</application>
注: 要使用用户注册表中组名成功授权,角色名称必须与注册表中此组的已配置全名或唯一名称而不是简短名称匹配。例如,如果组的简短名称为 swGroup,但用户注册表中其全名或唯一名称为 CN=swGroup,o=company,c=us,那么需要将 CN=swGroup,o=company,c=us 指定为角色名称,授权才能成功。

用于指示主题类型的图标 概念主题



时间戳记图标 最近一次更新时间: Tuesday, 6 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cwlp_authorization
文件名:cwlp_authorization.html