开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情
如果你正在构建一个REST服务,那么该REST服务将公开某种类型的数据或将允许与服务器进行某种类型的交互。例如,考虑一个允许检索聊天历史的Weibo REST服务。当然,你一定不希望任何人都查看历史,因此需要安全性。
REST 服务安全涉及哪些概念?
对于 Java EE 安全性,涉及到几个基本概念:
- Caller(调用者) 调用REST服务的用户或脚本。
- Role(角色) 与特定调用者关联的不透明属性或ID。这用于以抽象的方式引用一组调用者。例如,“所有具有‘xyz’角色的调用者。”
- Authenticating(身份验证) 调用者证明他们的身份,在很大程度上与“登录”同义。
- Authorizing(授权) 确定调用者是否有权访问某些内容。
- Authentication Mechanism(身份验证机制) 这指的是服务器与调用者交互以验证该调用者的特定方式。例如,对于 BASIC 身份验证机制,调用者通过 HTTP 标头发送用户名/密码组合,但对于 JWT 身份验证机制,发送的是 JWT 令牌。
- Identity Store(身份存储) 一种逻辑单元,能够验证凭证并返回调用方名称和与该调用方关联的零个或多个角色。标识存储通常(但不一定)提供对(外部)存储的访问,其中包含调用者的详细信息、他们的凭证和他们的角色,例如数据库、文件或LDAP标识存储。所有这些数据也可以存储在有效凭据中,对于JWT令牌来说就是这样。
如何保护 REST 服务
对于 Java EE (Payara 平台)安全性,有几个选项:
- REST服务可以通过在URL、端点(资源类)或方法级别上定义约束来得到保护。
- 身份验证机制可以从Servlet API、Java EE Security API或可使用的自定义(应用程序提供的)API中选择。
- 应用程序可以不定义身份存储,让其在Payara Server中进行配置(例如,使用管理控制台或CLI),可以从Java EE Security API定义的标识存储中选择身份存储,也可以使用自定义身份存储(应用程序提供的)。
Payara 平台提供哪些身份验证机制?
Payara 平台附带由 Servlet、Java EE 安全、MicroProfile 和 Payara API 定义的身份验证机制。这些都可以在很大程度上互换使用。请注意,并非所有这些都主要用于 REST 身份验证,而是更适合交互式网站(特别是基于 FORM 的网站)。
Payara 平台提供哪些身份存储?
Payara 平台附带由 Java EE 安全 API 定义的身份存储及其内部身份存储(JAAS LoginModule/GlassFish Realm 组合),可以通过管理控制台、CLI 或 domain.xml 配置。在 Payara 5.182 和 Java EE Security 的身份存储之前,我们可以与 Java EE Security、MicroProfile 和 Payara API 的身份验证机制配对,但不能与 Servlet 的身份验证机制配对。同样,内部的只能与 Servlet 的身份验证机制配对。Payara 5.182 可能会让这些都可以互换。请注意,MicroProfile JWT 有自己的身份存储,但如果需要JWT令牌提供的角色之外的其他角色,它可以与其他标识存储配对。