Spring BootでJWTアクセストークンのpermissionsで認可する – 【Auth0】
認可において、JWTのscope属性ではなくpermissions属性を見るように設定します。
dependencies
依存関係です。
implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server'
SecurityConfig.java
用意したAPIと必要な権限です。permissions属性にそれぞれの権限がないと403エラーにになります。
API | 権限 |
---|---|
/api/private-read-scoped | read:message |
/api/private-write-scoped | write:message |
SecurityConfig.java
package jp.co.confrage.auth0.config.security; import java.util.Collection; import java.util.stream.Collectors; import org.springframework.context.annotation.Bean; import org.springframework.core.convert.converter.Converter; import org.springframework.security.authentication.AbstractAuthenticationToken; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.oauth2.jwt.Jwt; import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationConverter; import org.springframework.security.web.SecurityFilterChain; @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.authorizeRequests() .mvcMatchers("/api/private-read-scoped").hasAuthority("read:message") .mvcMatchers("/api/private-write-scoped").hasAuthority("write:message") .and().cors() .and().oauth2ResourceServer().jwt().jwtAuthenticationConverter(grantedAuthoritiesExtractor()); return http.build(); } Converter<Jwt, AbstractAuthenticationToken> grantedAuthoritiesExtractor() { JwtAuthenticationConverter converter = new JwtAuthenticationConverter(); converter.setJwtGrantedAuthoritiesConverter(new GrantedAuthoritiesExtractor()); return converter; } static class GrantedAuthoritiesExtractor implements Converter<Jwt, Collection> { public Collection convert(Jwt jwt) { Collection authorities = (Collection)jwt.getClaims().get("permissions"); // permissions属性を取得するように指定 return authorities.stream() .map(SimpleGrantedAuthority::new) .collect(Collectors.toList()); } } }
参考サイト
12. OAuth2
Spring Boot + Auth0 でシンプルな認証・認可 (RBAC) を実装する - Qiita
##はじめに本投稿では Auth0 の ID Token と Spring Boot にて RBAC を実現する方法を記述する。##実現方法MP-JWT を模倣し、ID Token に権限情報…
Spring Boot security JWT hasAuthority not work properly
I secure our Spring Boot API with Auth0 and JWT.When I decode JWT the result is:{ "iss": " "sub": "auth0|62483c747a25190...
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント