webentwicklung-frage-antwort-db.com.de

Wie kann ich den Zugriff auf alle URLs standardmäßig verweigern?

Beim Definieren neuer Ressourcen für Spring Boot REST vergesse ich häufig, auch eine Spring-Sicherheitskonfiguration für ihre URL-Muster zu erstellen.

Wie kann ich standardmäßig den Zugriff auf alle URLs verweigern und nur den Zugriff auf explizit konfigurierte URL-Muster zulassen? (Ich verwende .hasRole, um den Zugriff zu ermöglichen.) Ich möchte so viele unbeabsichtigte Sicherheitslücken wie möglich vermeiden.

Angenommen, ich habe drei REST Ressourcen: /jobs, /desks und /salary. Mein aktueller Code könnte so aussehen:

http.authorizeRequests()

    .antMatchers(HttpMethod.GET, "/jobs")
    .hasRole("my_user")

    .antMatchers(HttpMethod.GET, "/desks")
    .hasRole("my_user");

Der Zugriff auf den URL /salary ist derzeit jedoch für alle Benutzer verfügbar (da er noch nicht konfiguriert ist).

12
slartidan

Sie können alle Anforderungen standardmäßig mit: .anyRequest().denyAll() Ablehnen und Anforderungen mit .hasRole explizit zulassen.

10
max

Spring Expression-Based Access Control hat einen denyAll-Ausdruck, der immer in false ausgewertet wird.

Sie können also diese denyAll-Methode verwenden, um den Zugriff auf alles zu verweigern, und dann möglicherweise den Zugriff auf eine bestimmte URL (s) über hasRole zulassen:

http.authorizeRequests().antMatchers("/admin/**").access("hasRole('ADMIN')").antMatchers("/**").denyAll();

So können Benutzer mit ADMIN-Zugriff beispielsweise auf alle Seiten zugreifen, die mit /admin beginnen. Und dann wird es den Zugriff auf alle anderen Seiten verweigern. Beachten Sie, dass die Reihenfolge wichtig ist, als würden Sie .antMatchers("/**").denyAll()first eingeben. Dies verweigert all access und ignoriert den Rest Ihres Ausdrucks.

Alternativ können Sie permitAll() für ein bestimmtes URL-Muster verwenden:

http.authorizeRequests().antMatchers("/users/**").permitAll().antMatchers("/**").denyAll();

Beachten Sie, dass Sie möglicherweise auch Zugriff auf eine Anmeldemethode gewähren müssen, damit sich das System jemandem mit einer bestimmten Rolle anmelden kann, um es zusammenzufassen und jedem zu erlauben, sich anzumelden, und nur Administratoren können darauf zugreifen die Admin-Seite (n) und alle anderen ablehnen, dann etwas wie:

http.authorizeRequests().antMatchers("/login").permitAll().antMatchers("/admin/**").access("hasRole('ADMIN')").antMatchers("/**").denyAll();
8
achAmháin

anyRequest().denyAll(), um alle Anforderungen standardmäßig zu verweigern, und .hasRole, um Anforderungen explizit zuzulassen

0
MBaev