Spring Boot 및 SAML 시작하기

11205 단어 javasamlspringboot

Spring Security의 SAML 지원으로 Okta 및 Auth0에 대해 인증하는 Spring Boot 애플리케이션을 빌드하는 방법을 알아보세요.






Spring은 전 세계 엔터프라이즈 기업의 오랜 친구입니다. 2014년에 Spring Boot가 나왔을 때 Spring 애플리케이션 구성이 크게 간소화되었습니다. 이로 인해 관련 Spring 프로젝트에 대한 광범위한 채택과 지속적인 투자가 이루어졌습니다.

내가 가장 좋아하는 Spring 프로젝트 중 하나는 Spring Security입니다. 대부분의 경우 몇 줄의 코드로 웹 보안을 단순화합니다. HTTP Basic, JDBC, JWT, OpenID Connect/OAuth 2.0, 이름을 지정하세요. Spring Security가 해냅니다!

인증 유형으로 SAML을 언급하지 않은 것을 알 수 있습니다. 추천하지 않기 때문입니다. SAML 2.0 사양은 스마트폰이나 스마트 장치가 존재하기도 전인 2005년 3월에 발표되었습니다. OIDC(OpenID Connect)는 개발자가 사용하고 이해하기가 훨씬 쉽습니다. 2022년에 SAML을 사용하는 것은 REST 대신 WS-*를 사용하여 웹 서비스를 구현하는 것과 같습니다.

내 추천: 그냥 OIDC를 사용하세요.

SAML을 Spring Boot와 함께 사용해야 하는 경우 이 자습서를 통해 빠르고 쉽게 사용할 수 있습니다.

전제 조건:

  • SDKMAN (자바 17용)

  • SAML이란 무엇입니까?



    Security Assertion Markup Language는 웹 인증 및 권한 부여를 수행하는 XML 기반 방식입니다. 도메인 간 작동하므로 SaaS 애플리케이션 및 기타 엔터프라이즈 소프트웨어에서 지원하는 경우가 많습니다.

    Nick Gamb은 .



    Spring Security가 SAML을 구현하는 방법을 알고 싶다면 해당 SAML 2.0 Login docs을 읽어보십시오.

    Okta에 SAML 애플리케이션 추가



    시작하려면 Okta 개발자 계정이 필요합니다. developer.okta.com/signup에서 생성하거나 Okta CLI을 설치하고 okta register를 실행할 수 있습니다.

    그런 다음 계정에 로그인하고 애플리케이션 > 앱 통합 생성으로 이동합니다. SAML 2.0을 선택하고 다음을 클릭합니다. 앱 이름을 Spring Boot SAML와 같이 지정하고 다음을 클릭합니다.

    다음 설정을 사용합니다.
  • 싱글 사인온 URL: http://localhost:8080/login/saml2/sso/okta
  • 받는 사람 URL 및 대상 URL에 사용: ✅(기본값)
  • 대상 URI: http://localhost:8080/saml2/service-provider-metadata/okta

  • 그런 다음 다음을 클릭합니다. 다음 옵션을 선택합니다.
  • 내부 앱을 추가하는 Okta 고객입니다
  • .
  • 이것은 우리가 만든 내부 앱입니다
  • .

    마침을 선택합니다.

    Okta가 앱을 생성하고 로그인 탭으로 리디렉션됩니다. SAML 서명 인증서까지 아래로 스크롤하고 SHA-2 > 작업 > IdP 메타데이터 보기로 이동합니다. 이 메뉴 항목의 링크를 마우스 오른쪽 버튼으로 클릭하고 복사하거나 해당 URL을 열 수 있습니다. 결과 링크를 클립보드에 복사합니다. 다음과 같아야 합니다.

    https://dev-13337.okta.com/app/<random-characters>/sso/saml/metadata
    


    앱의 할당 탭으로 이동하여 모든 사람 그룹에 대한 액세스 권한을 할당합니다.

    SAML 지원으로 Spring Boot 앱 만들기



    Spring Boot 3에는 Java 17이 필요합니다. SDKMAN으로 설치할 수 있습니다.

    sdk install java 17-open
    


    이 자습서를 수행하는 가장 쉬운 방법은 내가 만든 기존Spring Boot example application을 복제하는 것입니다.

    git clone https://github.com/oktadev/okta-spring-boot-saml-example.git
    


    처음부터 시작하려면 start.spring.io 을 사용하여 완전히 새로운 Spring Boot 앱을 만들 수 있습니다. 다음 옵션을 선택합니다.
  • 프로젝트: Gradle
  • 스프링 부트: 3.0.0(SNAPSHOT)
  • 종속성: Spring Web, Spring Security, Thymeleaf



  • this URL 또는 HTTPie를 사용할 수도 있습니다.

    https start.spring.io/starter.zip bootVersion==3.0.0-SNAPSHOT \
      dependencies==web,security,thymeleaf type==gradle-project \
      baseDir==spring-boot-saml | tar -xzvf -
    


    새로운 앱을 만든 경우 다음 단계를 완료해야 합니다.
  • src/main/java/com/example/demo/HomeController.java를 추가하여 인증된 사용자의 정보를 채웁니다.

  • package com.example.demo;
    
    import org.springframework.security.core.annotation.AuthenticationPrincipal;
    import org.springframework.security.saml2.provider.service.authentication.Saml2AuthenticatedPrincipal;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    @Controller
    public class HomeController {
    
        @RequestMapping("/")
        public String home(@AuthenticationPrincipal Saml2AuthenticatedPrincipal principal, Model model) {
            model.addAttribute("name", principal.getName());
            model.addAttribute("emailAddress", principal.getFirstAttribute("email"));
            model.addAttribute("userAttributes", principal.getAttributes());
            return "home";
        }
    
    }
    


  • 사용자 정보를 렌더링할 src/main/resources/templates/home.html 파일을 만듭니다.

  • <!DOCTYPE HTML>
    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org"
          xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity6">
    <head>
        <title>Spring Boot and SAML</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    </head>
    <body>
    
    <h1>Welcome</h1>
    <p>You are successfully logged in as <span sec:authentication="name"></span></p>
    <p>Your email address is <span th:text="${emailAddress}"></span>.</p>
    <p>Your authorities are <span sec:authentication="authorities"></span>.</p>
    <h2>All Your Attributes</h2>
    <dl th:each="userAttribute : ${userAttributes}">
        <dt th:text="${userAttribute.key}"></dt>
        <dd th:text="${userAttribute.value}"></dd>
    </dl>
    
    <form th:action="@{/logout}" method="post">
        <button id="logout" type="submit">Logout</button>
    </form>
    
    </body>
    </html>
    


  • Add a SAML application on Okta에서 복사한 메타데이터 URI를 포함하는 src/main/resources/application.yml 파일을 만듭니다. 이 값은 /sso/saml/metadata 로 끝나야 합니다.

  • spring:
      security:
        saml2:
          relyingparty:
            registration:
              okta:
                assertingparty:
                  metadata-uri: <your-metadata-uri>
    


  • 그런 다음 build.gradle를 변경하여 Spring Security SAML의 종속성을 추가합니다.

  • implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6'
    implementation 'org.springframework.security:spring-security-saml2-service-provider'
    


    GitHub에서 복제한 경우 메타데이터 URI를 포함하도록 업데이트application.yml만 하면 됩니다. 다른 속성은 문제를 일으킬 수 있으므로 제거할 수 있습니다.

    Read more...

    좋은 웹페이지 즐겨찾기