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
와 같이 지정하고 다음을 클릭합니다.다음 설정을 사용합니다.
http://localhost:8080/login/saml2/sso/okta
http://localhost:8080/saml2/service-provider-metadata/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 앱을 만들 수 있습니다. 다음 옵션을 선택합니다.
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>
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...
Reference
이 문제에 관하여(Spring Boot 및 SAML 시작하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/robertinoc_dev/get-started-with-spring-boot-and-saml-41p7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)