범위 토큰으로 API 실행
목차
참고 사이트
범위 정보
API 생성
다음 API를 작성합니다.
아니
API 이름
API path
스코프 이름
Java 파일
해설
1
Permit all
/
-
PermitAllController.java
모든 액세스 허용
2
Special
/special
SCOPE_special
SpecialController.java
'special' 범위가 있는 액세스 토큰에서만 액세스 가능
3
Get Object
/getObject
SCOPE_getObject
GetObjectController.java
'getObject' 범위가 있는 액세스 토큰에서만 액세스 가능
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class PermitAllController {
@GetMapping("/")
public String special() {
return "Welcome!";
}
}
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SpecialController {
@GetMapping("/special")
public String special() {
return "Special!";
}
}
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.List;
@RestController
public class GetObjectController {
@GetMapping(path = "/getObject")
public List<String> getObject() {
return Arrays.asList("value1","value2","value3");
}
}
리소스 서버 설정
import org.springframework.http.HttpMethod;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers(HttpMethod.GET, "/special").hasAuthority("SCOPE_special")
.antMatchers(HttpMethod.GET, "/getObject").hasAuthority("SCOPE_getObject")
.antMatchers(HttpMethod.GET, "/").permitAll()
.anyRequest().authenticated();
http.oauth2ResourceServer()
.jwt();
}
}
Keycloak에서 범위 설정
Keycloak 작업 정보 을 참고해, 「스코프, 매퍼의 작성과 클라이언트에 스코프를 설정한다」 부분대로 실시한다.
아니
API 이름
API path
스코프 이름
1
Special
/special
SCOPE_special
2
Get Object
/getObject
SCOPE_getObject
API 실행
아니
API 이름
API path
액세스 토큰 발급 필요?
1
Permit all
/
필요 없음
2
Special
/special
필요
3
Get Object
/getObject
필요
①액세스 토큰 발행
Special API의 토큰 발행을 위해, scope에 「openid {작성한 스코프 메이}」를 추가해 실행한다.
※openid는 필수
※Permit all API는, 액세스 토큰 발행은 필요 없다
응답
{
"access_token": "xxxxxxx",
"expires_in": 300,
"refresh_expires_in": 0,
"token_type": "Bearer",
"id_token": "xxxxx",
"not-before-policy": 0,
"scope": "openid profile email special"
}
②API 실행
Special과 Get Object API의 경우 ①에서 취득한 액세스 토큰을 이용하여 API를 실행한다.
Permit all API는 그대로 실행한다.
Reference
이 문제에 관하여(범위 토큰으로 API 실행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nayylin/items/3be85a6b7daf8a577f55텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)