是否可以在单个应用程序中拥有 SAML 2.0 身份验证和 JWT 身份验证?

Posted

技术标签:

【中文标题】是否可以在单个应用程序中拥有 SAML 2.0 身份验证和 JWT 身份验证?【英文标题】:Is it possible to have SAML 2.0 Authentication and JWT Authentication in a single Application? 【发布时间】:2019-10-21 14:42:26 【问题描述】:

我们的应用程序目前有自己的使用 JWT 的身份验证过程。

我们希望使用 SAML 2.0 (Azure AD) 仅为我们的应用程序中的特定用户角色添加 SSO(单点登录)登录。

是否可以在同一个 Spring-Boot 应用程序中拥有 2 个单独的身份验证协议?

【问题讨论】:

【参考方案1】:

是的。这是可能的。

这个想法是您可以注册许多AuthenticationProvider,其中每个AuthenticationProvider 负责一种特定类型的身份验证机制(即一种用于 JWT,一种用于 Azure AD)。

Spring Security 然后会一一循环遍历这些AuthenticationProvider 来检查哪一个可以成功验证请求。一旦发现AuthenticationProvider 可以成功进行身份验证,它将停止循环。

这意味着在您的每个AuthenticationProvider 中,您可以获取当前请求用户的角色信息,然后检查他是否具有该身份验证机制所需的角色。如果他没有所需的角色,只需抛出AuthenticationException

【讨论】:

感谢您的确认!我现在必须搜索 AuthenticationProvider 以及如何在我们的系统中实现它。 @NekoTamago。欢迎您并祝您旅途愉快:D

以上是关于是否可以在单个应用程序中拥有 SAML 2.0 身份验证和 JWT 身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

Shibboleth SP 是 SAML 2.0 的实现吗?

如何使用 SAML 2.0 响应进行特定 DNN 用户角色组身份验证和授权?

.Net 4.5 标准中的 SAML 2.0 协议支持

Python 中的 SAML 2.0 服务提供者

Spring MVC 中的 Okta SAML 2.0 实现(不是 Spring 引导)

如何在 Spring Boot 中从 Azure SAML 2.0 应用程序获取角色或组