春天。 REST API 的实现 Oauth.2.0

Posted

技术标签:

【中文标题】春天。 REST API 的实现 Oauth.2.0【英文标题】:Spring. Implementation Oauth.2.0 for REST API 【发布时间】:2020-10-14 00:18:22 【问题描述】:

如何使用 Spring Boot 和 Spring Security 将基本授权(登录名 + 密码)与其他服务(google、github、facebook)的授权结合起来?有很多信息,我不明白如何正确解决这个问题。如果提供教程或材料链接,我将不胜感激。

【问题讨论】:

这能回答你的问题吗? Spring Boot + Oauth2 client credentials 这是一个非常琐碎的问题。看看这里spring.io/guides/tutorials/spring-boot-oauth2 【参考方案1】: Spring 安全性是使用过滤器链实现的,每个职责都分配给特定类型。 例如,下图显示了用户名密码认证所涉及的组件。 但 Spring 安全框架允许您在同一应用程序中为每种类型拥有多个实现。 如果您需要多种身份验证机制,请提供该机制每个阶段的具体实现列表。例如,在您的情况下,在 AuthenticationFilter 中,您将有一个用于用户名/密码身份验证机制的 UsernamePasswordAuthenticationFilter 和一个用于 Oauth2 登录机制的 OAuth2LoginAuthenticationFilter。然后对于AuthenticationTokens,您将拥有UsernamePasswordAuthenticationTokenOAuth2LoginAuthenticationToken。以此类推每个阶段。 现在,当 http 请求到达服务器时,在每个阶段,spring 将遍历该阶段的列表,直到其中一个满足或列表完成。例如,如果请求带有password 参数(或者你知道它总是来自/login url),在AuthenticationFilterOAuth2LoginAuthenticationFilter 将满足它,它将创建UsernamePasswordAuthenticationToken 和将其传递到第三阶段。但是如果请求带有令牌,它将满足OAuth2LoginAuthenticationFilter,它会创建OAuth2LoginAuthenticationToken并将其传递给第三阶段。

我希望这能给你一个高层次的画面,只用用户名和密码实现一个示例应用程序,在我提到的源代码 spring 安全类中放置断点,看看它在每个阶段是如何迭代的。

一旦您确信这些过滤器是如何链接的,然后尝试添加类似 ldap 身份验证的东西作为您应用的第二个身份验证机制。

一旦你有信心实现这 2 个,然后通过关注 https://spring.io/guides/tutorials/spring-boot-oauth2/ 来添加 OAuth2

参考图:https://springbootdev.com/2017/08/23/spring-security-authentication-architecture/

【讨论】:

我将您的答案标记为我的问题的答案。谢谢))

以上是关于春天。 REST API 的实现 Oauth.2.0的主要内容,如果未能解决你的问题,请参考以下文章

使用 facebook 登录并使用 oauth 2.0 对 REST api 调用进行身份验证

使用 Azure AD 承载令牌时身份验证失败,返回容器列表 [Azure Blob] [Azure AD OAuth 2.0] [REST API]

用于 REST Web 服务的 OAuth 2.0

什么是与 Stripe Connect 等效的 PayPal REST API?

使用 oAuth 2.0 保护基于 Jersey 的 REST 服务

YouTube API - Oauth2 流程(OSGI 捆绑包)