实现 OpenID Connect 和 OAuth2 进行身份验证与授权
1. 背景与概念
在许多应用场景中,基于表单的身份验证和内部授权虽有用,但“你知道的信息”这种身份验证方法在某些情况下并不理想,甚至无法满足所需的安全级别。以下是一些具体场景:
- 免费服务需要身份验证,但无需了解用户信息(或因法律等原因不想了解)。
- 单因素身份验证被认为不够安全,需要多因素身份验证(MFA)支持。
- 担心创建和维护用于管理密码、角色/权限等必要机制的安全软件基础设施。
- 担心在发生安全漏洞时承担责任。
为解决这些问题,一些公司构建并维护了强大且安全的身份验证和授权基础设施,如 Okta、Facebook、GitHub 和 Google 等。Spring Security 通过 OpenID Connect 和 OAuth2 支持这些选项。
OAuth2 用于为第三方提供用户对指定资源(如基于云的服务、共享存储和应用程序)的授权。OpenID Connect 基于 OAuth2,增加了一致、标准化的身份验证,使用以下一种或多种因素:
- 你知道的信息,例如密码。
- 你拥有的东西,如硬件密钥。
- 你的特征,如生物识别标识符。
Spring Boot 和 Spring Security 支持对 Facebook、GitHub、Google 和 Okta 提供的 OpenID Connect 和 OAuth2 实现进行开箱即用的自动配置,由于 OpenID Connect 和 OAuth2 的公开标准以及 Spring Security 的可扩展架构,还可以轻松配置其他提供商。