Heim  >  Artikel  >  Problem mit der rollenbasierten Autorisierung von Spring Security: 403 Verbotener Fehler

Problem mit der rollenbasierten Autorisierung von Spring Security: 403 Verbotener Fehler

PHPz
PHPznach vorne
2024-02-09 11:21:08634Durchsuche

Spring Security ist ein leistungsstarkes Sicherheitsframework zum Schutz von Anwendungen vor böswilligen Angriffen. Bei Verwendung von Spring Security können Rollenautorisierungsprobleme zu 403 Forbidden-Fehlern führen. Der PHP-Editor Banana stellt Ihnen dieses Problem ausführlich vor und bietet eine Lösung, die Ihnen hilft, das Problem der Rollenberechtigung erfolgreich zu lösen. Unabhängig davon, ob Sie Anfänger oder erfahrener Entwickler sind, hilft Ihnen dieser Artikel dabei, den Rollenautorisierungsmechanismus von Spring Security genau zu verstehen und zu lernen, mit 403 Forbidden-Fehlern richtig umzugehen.

Frageninhalt

Frage:

Ich versuche, einen Spring-basierten Webserver mit rollenbasierter Authentifizierung zu erstellen, erhalte jedoch ständig die Fehlermeldung 403 verboten. Ich habe eine benutzerdefinierte userdetails-Klasse implementiert und vermute, dass ein Problem mit meiner Konfiguration vorliegt.

Code:

Anpassung userdetails:

public class customuserdetails implements userdetails {
    private static final long serialversionuid = 1l;
    private final user user;

    public customuserdetails(user user) {
        this.user = user;
    }

    @override
    public collection<? extends grantedauthority> getauthorities() {
        return user.getroles().stream().map(r -> new simplegrantedauthority("role_" + r.getname())).tolist();
    }

    // ... other userdetails methods
}

securityfilterchain Umsetzung:

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    return http
        .csrf(csrf -> csrf.disable())
        .sessionManagement(sess -> sess.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
        .authorizeHttpRequests(requests -> requests
            .requestMatchers("/api/**").permitAll()
            .requestMatchers("/secret/**").hasAuthority("USER")
            .anyRequest().authenticated())
        .oauth2ResourceServer(oauth2 -> oauth2.jwt(Customizer.withDefaults()))
        .addFilterBefore(authorizeFilter, UsernamePasswordAuthenticationFilter.class)
        .build();
}

Ich habe eine benutzerdefinierte userdetails 类并配置了 spring security 以进行基于角色的身份验证。但是,即使我相信角色已正确分配,我仍然遇到 403 forbidden 错误。我尝试同时使用 hasrolehasauthority Klasse implementiert und Spring Security für die rollenbasierte Authentifizierung konfiguriert. Obwohl ich glaube, dass die Rollen korrekt zugewiesen sind, erhalte ich dennoch die Fehlermeldung 403 verboten. Ich habe versucht, sowohl hasrole als auch hasauthority zu verwenden, aber das Problem besteht weiterhin. Was fehlt in meiner Konfiguration?

Jede Einsicht oder Anregung wäre sehr dankbar. Danke!

Workaround

Für Ressourcenserver mit JWT werden Berechtigungen vom Authentifizierungskonverter festgelegt.

Der Standard-Authentifizierungskonverter ist JwtAuthenticarionConverter,它将权限转换委托给可配置的权限转换器(默认使用 scope 声明中的条目添加 SCOPE_ Präfix).

Sie können einen mit einem anderen Berechtigungskonverter konfigurierten Konverter bereitstellen JwtAuthenticationConverter (一个使用另一个声明作为权限源),或者切换到完全不同的 Converterd5f3c2e320864c54a83e1ef7cadf1add(oauth2-> oauth2.jwt(Jwt -> jwt.jwtAuthenticationConverter(...))

Sie können auch diesen zusätzlichen Starter in Betracht ziehen Ich verwalte ihn mithilfe einer konfigurierbaren Berechtigungskonverter-Anwendungseigenschaft (es sei denn, Sie geben Ihre eigene Berechtigung oder Ihren eigenen Authentifizierungskonverter in der Konfiguration an)

Sie können versuchen, die TRACE-Protokolle von Spring zu öffnen und herauszufinden, wo das Problem liegt tritt ein. Dieser Vorschlag hilft Ihnen vielleicht nicht direkt, aber er hat uns dabei geholfen, den Grund herauszufinden, warum die API bei der Migration auf Springboot3.0

403 zurückgibt

Das obige ist der detaillierte Inhalt vonProblem mit der rollenbasierten Autorisierung von Spring Security: 403 Verbotener Fehler. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen