인증 빼먹으면 API가 그대로 노출됩니다
CAP for Java 앱을 BTP에 배포할 때 XSUAA 바인딩과 JWT 검증을 누락하면, 인증 없는 엔드포인트가 외부에 그대로 노출될 수 있습니다. 특히 @cds.requires: 'authenticated-user' 선언을 빠뜨리면 Service 전체가 익명 호출 가능해지는 경우가 일반적입니다.
xs-security.json 권한 정의
{
"xsappname": "bookshop-app",
"tenant-mode": "dedicated",
"scopes": [
{ "name": "$XSAPPNAME.Admin", "description": "Admin scope" }
],
"role-templates": [
{ "name": "Admin", "scope-references": ["$XSAPPNAME.Admin"] }
]
}
CDS 모델 + Java 어노테이션 결합
service AdminService @(requires: 'Admin') {
entity Books as projection on db.Books;
}
@Component
@ServiceName(AdminService_.CDS_NAME)
public class AdminHandler implements EventHandler {
@Before(event = CqnService.EVENT_CREATE, entity = Books_.CDS_NAME)
@PreAuthorize("hasAuthority('Admin')")
public void onCreate(CdsCreateEventContext ctx) {
// Admin scope 보유자만 진입
}
}
application.yaml 에는 spring.profiles.active: cloud 와 함께 cds.security.mock.enabled: false 를 명시해, 로컬 모킹이 운영에 새는 사고를 막는 것이 권장됩니다.
자주 놓치는 포인트
첫째, mock-users 설정을 운영 프로파일에 남기면 누구나 admin으로 로그인됩니다. 둘째, @PreAuthorize 는 cds-feature-xsuaa 의존성이 있어야 동작합니다. 셋째, CSRF 토큰을 끄면 편하지만 변경계 API는 토큰 검증을 유지하는 것이 일반적입니다.
핵심 한 줄
requires 한 줄과 XSUAA 바인딩이 빠지면, 그 API는 사실상 공개 API입니다.
댓글 0
아직 댓글이 없습니다.