我们如何在同一个 Spring 应用程序中同时添加 JWT 和基本身份验证? [关闭]

Posted

技术标签:

【中文标题】我们如何在同一个 Spring 应用程序中同时添加 JWT 和基本身份验证? [关闭]【英文标题】:How can we add JWT and basic authentication simultaneously in same spring application? [closed] 【发布时间】:2020-04-11 22:02:36 【问题描述】:

我有一个要求,所有调用都使用 JWT/Filters 进行身份验证,但现在我希望所有具有 /restexternal/ 的调用都应该绕过 jwt 身份验证,并且应该使用基本身份验证。是否有可能有 2 个网络安全配置器或其他东西?我们如何才能做到这一点?

我可以从 JWT 身份验证中排除特定的 url,但是我如何要求 spring 进行基本身份验证? TIA

【问题讨论】:

【参考方案1】:

Spring Security 也支持多重身份验证。可以参考here

您可以参考这里为不同的 API 地址进行不同的身份验证: spring-multiple-authentication-methods-for-different-api-endpoints

【讨论】:

我不是在寻找不同类型的身份验证实现。我想合并 JWT 和基本身份验证。这与拥有多个身份验证提供者不同。 请看这个,如果这也不符合您的要求,请告诉我:***.com/questions/54706291/… 如果我提到两个带有@Order(1) 和@Order(2) 的配置器,它们都会被执行吗?并按什么顺序?意味着我必须在 @Order(1) 中提及我的基本身份验证 url,在 @Order(2) 中提及 jwt url?两者都可以吗? 是的,首先它转到@Order(1),如果需要对API 进行身份验证,它将尝试对其进行身份验证,否则传递给@Order(2)。如果@Order(1) 认证失败,它会尝试通过@Order(2) 认证。 @RoobalJindal,解决了吗?【参考方案2】:

是的,您的应用中可以有多个过滤器。

 @SpringBootApplication
 public class SpringBootJwtApplication 

 @Bean
 public FilterRegistrationBean jwtFilter() 
    final FilterRegistrationBean registrationBean = new FilterRegistrationBean();
    registrationBean.setFilter(new JwtFilter());
    registrationBean.addUrlPatterns("/secure/*");


    registrationBean.setFilter(new BasicAuth());
    registrationBean.addUrlPatterns("/restexternal/*");
    return registrationBean;


public static void main(String[] args) 
    SpringApplication.run(SpringBootJwtApplication.class, args);

其中Urls 具有路径secure 将被JwtFilterrestexternal 过滤BasicAuth

【讨论】:

我们正在实现 ResourceServerConfigurerAdapter 并覆盖其 configure() 以添加 JWT 过滤器。我们如何为我们的特定 url 添加基本身份验证?有博客链接吗?【参考方案3】:

我们不能同时做这两件事。我有一个场景,我必须对我的一个项目使用基本身份验证,而对另一个项目使用 JWT,并且两个包都在具有不同端点的单个项目中。

如果您将两种身份验证放在一起,JWT 将始终被称为不是基本身份验证。

【讨论】:

我也面临同样的问题。 我们可以使用 2 个授权提供者和端点来做到这一点.. : ***.com/questions/54706291/…

以上是关于我们如何在同一个 Spring 应用程序中同时添加 JWT 和基本身份验证? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring 安全性中同时使用数据库和 LDAP 身份验证?

如何将JDBI添加到Spring Boot应用程序中?

Spring Social Login:如何添加同一个社交提供商(例如 Facebook)的多个应用程序?

我可以在应用程序中同时实现 SAML 和基本 spring 安全性吗?

如何在 Spring Boot 应用程序的同一个域类上同时使用 Spring Data JPA 和 Spring Data Elasticsearch 存储库?

我们可以在一个项目中同时使用 Java Spring mvc 和 Spring Boot 吗?