3.5 授权要求
为支持本章所述的授权模型,Jakarta EE 产品必须满足以下要求。
3.5.1 调用方授权
Jakarta EE 产品必须实施部署时指定的访问控制规则(参见部署要求),这些规则在 Jakarta Enterprise Beans 与 Servlet 规范中有更完整的说明。
3.5.2 传播调用方身份
对于包含 Jakarta Enterprise Beans 容器的 Jakarta EE 产品,必须支持相应配置,使得传播的调用方身份可用于所有授权判定。 在该配置下,来自同一 Jakarta EE 产品内单个应用对所有企业 Bean 的全部调用,由 EJBContext 的 getCallerPrincipal 方法或 SecurityContext 的 getCallerPrincipal 方法返回的主体名称,必须与调用链中第一个企业 Bean 所返回的主体名称一致。 如果调用链中的第一个企业 Bean 是由 Servlet 或 JSP 页面调用,则该主体名称必须与调用方 Servlet 或 JSP 页面中 HttpServletRequest 的 getUserPrincipal 方法或 SecurityContext 的 getCallerPrincipal 方法返回的主体名称一致。 (但是,如果 HttpServletRequest 或 SecurityContext 的 getCallerPrincipal 返回 null,则本规范不规定调用企业 Bean 时所使用的主体,尽管仍需支持将企业 Bean 配置为可被此类组件调用。)
注意,此要求不强制凭证委托,仅要求标识调用方。在对调用链中所有企业 Bean 的访问授权判定中,必须使用同一个主体。 本节要求仅在 Jakarta EE 产品被配置为传播调用方身份时适用。
3.5.3 以指定身份运行(Run As)
Jakarta EE 产品必须支持以指定身份运行(Run As)能力,允许应用组件开发者与部署者指定企业 Bean 或 Web 组件运行时所使用的身份。 在此场景下,传播到后续 Jakarta Enterprise Beans 组件的是该Run As 身份,而非原始调用方身份。
注意:本规范未定义 Run As 身份与用于访问文件等系统资源的底层操作系统身份之间的任何关系。 不过,Jakarta 授权规范中明确规定了 Run As 身份与访问控制上下文之间的关联。
