SSO(Single Sign-On, 단일 로그인)는 한 번의 로그인으로 여러 서비스나 시스템에 접근할 수 있도록 하는 인증 방식이다.
사용자는 한 번 로그인하면 추가 인증 없이 여러 애플리케이션을 사용할 수 있다.
SSO는 주로 토큰 기반 인증을 사용하며, 대표적으로 SAML, OAuth, OpenID Connect 등의 프로토콜을 활용한다.
SSO를 구현하는 방식은 여러 가지가 있지만, 일반적으로 OAuth2.0, OpenID Connect(OIDC), SAML 프로토콜을 사용한다.
OAuth2.0은 사용자 인증 보다는 권한 부여에 초점을 둔 프로토콜이며, OpenID Connect(OIDC)는 OAuth2.0을 확장하여 인증 기능을 추가한 표준이다.
SAML은 XMl기반의 SSO 프로토콜로 기업 환경에서 많이 사용된다.
Spring Boot + OAuth2.0 클라이언트 설정
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
spring:
security:
oauth2:
client:
registration:
keycloak:
client-id: my-client
client-secret: my-secret
scope: openid
authorization-grant-type: authorization_code
redirect-uri: "http://localhost:3000/login/oauth2/code/keycloak"
provider:
keycloak:
issuer-uri: "http://localhost:8080/realms/my-realm"
@RestController
public class LoginController {
@GetMapping("/user")
public Map<String, Object> getUser(@AuthenticationPrincipal OAuth2User principal) {
return Collections.singletonMap("name", principal.getAttribute("name"));
}
}
💡 SSO는 사용자 경험을 개선하고 보안을 강화하는 핵심 기술로, 한 번의 인증으로 여러 애플리케이션의 사용자 로그인을 허용하는 통합 인증 솔루션이다.
OAuth2.0 + OpenId Connect(OIDC) 또는 SAML을 사용하여 SSO를 구현할 수 있다.
기업 환경에서는 SAML, 일반 웹 서비스에서는 OAuth2.0 + OIDC를 선택하는 것이 일반적이다.