>  기사  >  Java  >  Keycloak 및 Spring Boot: Single Sign-On 구현을 위한 최고의 가이드

Keycloak 및 Spring Boot: Single Sign-On 구현을 위한 최고의 가이드

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-03 23:10:30412검색

소개:

SSO(Single Sign-On)는 최신 웹 애플리케이션의 필수 기능이 되어 사용자 경험과 보안을 모두 향상시킵니다. 이 포괄적인 가이드는 Keycloak 및 Spring Boot를 사용하여 SSO를 구현하는 과정을 안내하여 애플리케이션에 대한 강력한 인증 및 권한 부여 솔루션을 제공합니다.

Keycloak을 통한 SSO의 중요성

SSO(Single Sign-On)는 인증 프로세스 간소화, 보안 강화, 사용자 경험 개선에 필수적입니다. 주요 이점은 다음과 같습니다.

  1. 중앙 집중식 인증: SSO를 사용하면 사용자가 한 번 인증하고 여러 애플리케이션에 액세스할 수 있습니다. Keycloak은 사용자 ID에 대한 중앙 집중식 관리를 제공하므로 수많은 애플리케이션이 있는 환경에 유용합니다.

  2. 향상된 보안: 중앙 집중식 ID 관리를 통해 보안 정책(예: 비밀번호 강도, 2단계 인증, 계정 잠금 정책)을 일관되게 시행할 수 있습니다. OpenID Connect 및 OAuth 2.0과 같은 프로토콜에 대한 Keycloak 지원은 강력하고 현대적인 보안 표준을 보장합니다.

  3. 비밀번호 피로도 감소 및 사용자 경험 향상: 한 번만 로그인하면 사용자는 비밀번호 피로도와 여러 자격 증명을 피할 수 있으므로 애플리케이션 전반에서 더 원활하고 빠른 상호 작용이 가능합니다.

  4. 확장성 및 유연성: Keycloak의 구성은 소셜 로그인(Google, Facebook 등) 및 기업 디렉터리(LDAP, Active Directory)를 포함하여 다수의 사용자와 여러 ID 공급자를 지원할 수 있습니다.

  5. 사용자 정의 및 확장성: Keycloak은 사용자 정의 테마, 로그인 흐름 및 확장 기능을 허용하여 다양한 요구 사항에 맞게 조정할 수 있습니다. 또한 오픈 소스이므로 조직이 필요에 따라 플랫폼을 수정하거나 확장할 수 있는 유연성을 제공합니다.
    SSO(Single Sign-On)의 대안:

  6. 다중 로그인/기존 인증:

    • 사용자는 각 애플리케이션이나 서비스에 대해 별도의 자격 증명을 갖습니다
    • 각 시스템에 개별적으로 로그인해야 함
    • 각 애플리케이션은 자체 인증을 관리합니다
  7. 연합 ID:

    • SSO와 유사하지만 다양한 조직에 걸쳐 인증이 가능합니다
    • SAML 또는 OpenID Connect와 같은 표준을 사용합니다
    • 사용자의 신원은 소속 기관에서 확인됩니다
  8. 다단계 인증(MFA):

    • 사용자 이름과 비밀번호 이상의 추가 보안 계층을 추가합니다
    • SSO 또는 기존 인증과 함께 사용할 수 있습니다
    • 일반적으로 당신이 알고 있고, 갖고 있고, 있는 것과 관련됩니다

SSO 흐름 설명:

구현을 시작하기 전에 SSO 흐름을 이해해 보겠습니다.

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On

전제 조건:

  • 자바 17 이상
  • 메이븐
  • Docker(Keycloak 실행용)

1단계: 프로젝트 설정

다음 구조로 새 Spring Boot 프로젝트를 만듭니다.

keycloak-demo/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── bansikah/
│   │   │           └── keycloakdemo/
│   │   │               ├── config/
│   │   │               │   └── SecurityConfig.java
│   │   │               ├── controller/
│   │   │               │   └── FoodOrderingController.java
│   │   │               └── KeycloakDemoApplication.java
│   │   └── resources/
│   │       ├── templates/
│   │       │   ├── home.html
│   │       │   └── menu.html
│   │       └── application.yml
├── docker-compose.yml
└── pom.xml

참고:

반시카가 내 이름인가요? 원하는 것을 입력하거나 예시를 넣을 수 있습니다...

2단계: pom.xml 구성

pom.xml에 다음 종속성을 추가하거나 충돌을 피하기 위해 종속성 섹션을 바꿀 수 있습니다.

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-oauth2-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.thymeleaf.extras/thymeleaf-extras-springsecurity3 -->
        <dependency>
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-springsecurity3</artifactId>
            <version>3.0.5.RELEASE</version>
        </dependency>
    </dependencies>

3단계: Docker로 Keycloak 설정

루트 디렉터리에 docker-compose.yml 파일을 만듭니다.

version: '3'

services:
  keycloak:
    image: quay.io/keycloak/keycloak:latest
    environment:
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: admin
    ports:
      - "8088:8080"
    command:
      - start-dev

  app:
    build: .
    ports:
      - "8082:8082"
    depends_on:
      - keycloak

다음을 사용하여 Keycloak 서버를 실행하세요.

docker-compose up -d

4단계: Keycloak 구성

  1. Keycloak 관리 콘솔에 액세스:

    • http://localhost:8088로 이동하세요.
    • 사용자 이름과 비밀번호로 admin/admin으로 로그인
  2. 새 영역 만들기:

    • 왼쪽 상단의 "마스터"로 이동
    • "영역 추가"를 선택하세요
    • 음식 주문 영역으로 이름을 지정하세요.
    • '만들기' 클릭
  3. 새 고객 만들기:
    첫 번째 화면에서:

    • "클라이언트 ID"를 "음식 주문-클라이언트"로 설정
    • 클라이언트 유형: "OpenID Connect"를 선택하세요
    • "다음"을 클릭하세요

다음 화면(기능 구성):

  • 클라이언트 인증: 이 기능을 켜세요(기존 "기밀" 설정을 대체함)
  • 승인: 세부적인 승인이 필요하지 않은 한 이 기능을 꺼짐으로 둘 수 있습니다
  • "다음"을 클릭하세요
  1. 클라이언트 구성:
    • 루트 URL을 http://localhost:8082/로 설정합니다.
    • 액세스 유형을 기밀로 설정
    • 유효한 리디렉션 URI를 추가하세요(각 URI는 새 줄에 있음):
 http://localhost:8082/
 http://localhost:8082/menu
 http://localhost:8082/login/oauth2/code/keycloak
  • 웹 출처 설정: http://localhost:8082
  • '저장'을 클릭하세요

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On

  1. 클라이언트 비밀번호 검색:
    • 자격증명 탭으로 이동
    • 애플리케이션 구성에 사용할 비밀 필드 값을 복사하세요

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On

  1. 사용자 생성:
    • 사용자로 이동하여 "사용자 추가"를 클릭하세요
    • 사용자 이름 설정(예: testuser)
    • 자격증명 탭:
      • 비밀번호 설정
      • '임시' 비활성화

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On
비밀번호를 설정하세요:

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On

5단계: Spring Boot 애플리케이션 구성

src/main/resources에 application.yml 만들기:

keycloak-demo/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── bansikah/
│   │   │           └── keycloakdemo/
│   │   │               ├── config/
│   │   │               │   └── SecurityConfig.java
│   │   │               ├── controller/
│   │   │               │   └── FoodOrderingController.java
│   │   │               └── KeycloakDemoApplication.java
│   │   └── resources/
│   │       ├── templates/
│   │       │   ├── home.html
│   │       │   └── menu.html
│   │       └── application.yml
├── docker-compose.yml
└── pom.xml

바꾸기 Keycloak에서 복사한 비밀(일반적으로 임의의 텍스트)을 사용합니다.
참고:

프로덕션에서 또는 모범 사례로서 프로젝트 루트의 .env 파일과 같은 민감한 정보를 유지하고 이를 구성에서 변수로 사용하는 것이 좋습니다. 이는 ${CLIENT_SECRET}과 같습니다. 애플리케이션을 시작할 때 .env 파일에서 선택합니다. 이는 리디렉션, issuer-uri 및 나머지에도 적용 가능합니다..

6단계: 보안 구성 생성

src/main/java/com/bansikah/keycloakdemo/config에 SecurityConfig.java를 생성하세요.

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-oauth2-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.thymeleaf.extras/thymeleaf-extras-springsecurity3 -->
        <dependency>
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-springsecurity3</artifactId>
            <version>3.0.5.RELEASE</version>
        </dependency>
    </dependencies>

7단계: 컨트롤러 생성

src/main/java/com/bansikah/keycloakdemo/controller에 FoodOrderingController.java를 생성하세요.

version: '3'

services:
  keycloak:
    image: quay.io/keycloak/keycloak:latest
    environment:
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: admin
    ports:
      - "8088:8080"
    command:
      - start-dev

  app:
    build: .
    ports:
      - "8082:8082"
    depends_on:
      - keycloak

8단계: HTML 템플릿 만들기

src/main/resources/templates에 home.html을 생성하세요:

docker-compose up -d

src/main/resources/templates에 menu.html을 생성하세요:

 http://localhost:8082/
 http://localhost:8082/menu
 http://localhost:8082/login/oauth2/code/keycloak

9단계: 애플리케이션 실행

이 URL http://localhost:8082에서 애플리케이션에 액세스할 수 있어야 하며 다음이 표시되어야 합니다.

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On
여기 링크를 클릭하면 사용자가 foodorder 영역에서 사용자 이름과 비밀번호로 인증해야 하는 keycloak 양식으로 이동합니다

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On

인증이 완료되면 메뉴 페이지가 나타납니다

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On

이제 SSO의 중요성으로 인해 로그아웃하더라도 아래와 같이 다시 로그인할 필요가 없습니다

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On
그런 다음 링크를 다시 클릭하면 아래와 같이 비밀번호와 사용자 이름을 다시 입력하라는 메시지가 표시되지 않습니다

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On

결론

축하드려요? 그리고 지금까지 따라와주셔서 감사합니다
이 구현은 Keycloak 및 Spring Boot를 사용하는 강력한 SSO 솔루션을 보여줍니다. 보안을 유지하면서 원활한 인증 환경을 제공합니다. 이 구성을 사용하면 특정 애플리케이션 요구 사항을 충족하기 위해 쉽게 사용자 정의하고 확장할 수 있습니다.
이 구현에 대해 문제가 발생하거나 질문이 있는 경우 아래에 의견을 남겨주세요. 고급 구성 및 기능에 대해서는 Spring Security 및 Keycloak 문서를 확인하세요.
github의 코드 링크

참조:

  • 스프링부츠
  • 키클로크
  • 자바 17
  • 메이븐
  • 도커

위 내용은 Keycloak 및 Spring Boot: Single Sign-On 구현을 위한 최고의 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.