首页 > 解决方案 > 结合OAuth2和http基本认证spring security

问题描述

我已经使用 spring boot 和 spring security 实现了 OAuth2。现在我有不同的 API 可用,我想为它使用不同的身份验证方法。例如,我想对 API 使用 OAuth2,/users/**对 API 使用 Http Basic Authentication /admin/**

但是,OAuth2 不应该适用于 API /admin/**,HTTP basic 也不应该适用于/users/**API。

任何帮助都会很棒!

标签: springspring-bootspring-securityoauth-2.0spring-security-oauth2

解决方案


在 Spring Security 中,您可以有多个过滤器链来处理不同的请求。因此,您可以有一个处理对 /users/** uri 的请求,该 uri 将具有基本身份验证过滤器,另一个处理对 /admin/** uri 的请求,它将具有 Oauth2 过滤器。要进行此设置,您需要 2 个 WebSecurityConfigurerAdapter 实例

一个用于 Oauth2

@Configuration
@Order(1)
public static class Oauth2ConfigurationAdapter extends WebSecurityConfigurerAdapter {

    protected void configure(HttpSecurity http) throws Exception {
       http.mvcMatcher("/user/**")
       ...... 

还有一个基本的:

@Configuration
@Order(2)
public static class BasicConfigurationAdapter extends WebSecurityConfigurerAdapter {

    protected void configure(HttpSecurity http) throws Exception {
       http.mvcMatcher("/admin/**")
       ...... 

本文更详细地解释它:https ://www.baeldung.com/spring-security-multiple-entry-points

此外,此代码与 /admin 的 Digest auth 和所有其他的 Basic 执行类似的操作。https://github.com/wlesniak/spring-security-authn-authz-course/tree/master/module_2/mod2_crypto_portfolio_digest


推荐阅读