SSO(Single Sign-On)은 1회성 사용자 인증으로 다수의 서비스에서 통합된 로그인 인증을 허용하는 솔루션입니다.
인증의 증명이 되는 플랫폼은 여러 가지가 될 수 있지만 이 문서에서는 Microsoft ID 플랫폼을 사용하는 SSO 인증을 구현합니다.
MS에서 SSO 인증을 구현하려면 Azure Active Directory(Azure AD)의 Tenant를 사용합니다.
테스트 환경 및 주요 아젠다
이 프로젝트의 개발 환경
- 개발 언어 및 환경
샘플 코드를 사용하여 Microsoft Graph를 호출하는 Java 웹 애플리케이션을 완성합니다.
- Azure AD로부터
ID 토큰을 획득합니다. ID 토큰을 사용하여 사용자를 로그인합니다.- Bearer 토큰으로 사용되는
Access 토큰을 획득합니다. Access 토큰을 사용하여 Microsoft Graph를 호출하고 로그인 된 사용자 정보를 읽습니다.
이 샘플은 OpenId Connect를 사용하여 로그인하고 MSAL4J로 Microsoft Graph에 엑세스합니다.
이 시나리오 및 프로토콜이 동작하는 방식은 Authentication Scenarios for Azure AD를 참고합니다.
Azure AD가 무엇인가요?
Azure AD는 MS 사에서 제공하는 MS 통합 사용자 증명을 위한 솔루션입니다. 애플리케이션을 등록 및 관리하고, Microsoft 365와 Web API에 대한 데이터 엑세스 구성이 가능합니다.
MS와의 관계는 Azure, Microsoft Intune 또는 Microsoft 365와 같은 MS 계열 서비스에 가입하면 시작됩니다.
Prerequisites
구독이 활성화 된 Azure 계정이 필요합니다. Create an account for free를 참고합니다.
다음으로 Tenant를 구성해야 합니다. Tenant는 MS와의 관계에서 조직(사업체 또는 애플리케이션 개발자)이 받을 수 있는 Azure AD 전용 인스턴스(Dedicated instance)입니다.
이미 많은 개발자들이 MS의 서비스(Microsoft 365 또는 Azure 구독과 같은)를 통해 Tenant를 갖고있습니다.
Tenant를 확인하려면: Azure portal에 로그인합니다. 보유중인 Tenant가 존재하면 Azure portal | 오른쪽 상단 프로필 | 마우스 포커싱을 유지하는 것으로 Tenant 정보가 표시됩니다.
이름 | 전자 메일 | 디렉토리 | 도메인 |
Azure 계정에서 여러 개의 Tenant와 연결되어 있다면 Azure portal | 오른쪽 상단 프로필 | 디렉토리 전환으로 사용하려는 Tenant를 선택합니다.
Tenant ID를 찾으려면?
Azure portal | 오른쪽 상단 프로필 | 마우스 포커싱을 유지하고 디렉토리 또는 Tenant ID를 확인합니다.
Azure portal에서 Azure Active Directory | Properties | Tenant ID를 확인합니다.
아직 Azure AD Tenant가 없거나 새로운 Tenant를 등록하려면 다음 문서를 참고합니다.
새로운 Tenant를 등록하려면 다음 정보가 필요합니다.
Tenant 유형(Type): Azure AD 또는 Azure AD B2C기관명(Organization name)초기 도메인(Initial domain): 초기 도메인으로 지정되는<도메인 이름>.onmicrosoft.com은 편집하거나 삭제 할 수 없습니다.국가 또는 리전(Country or region)
Tenant 이름을 지을 때는 영숫자를 사용합니다. 특수 문자는 이름으로 사용 할 수 없으며 256자를 초과 할 수 없습니다.
샘플 프로젝트 시작 및 Azure AD 구성
CLI에서 git clone을 실행합니다.
$ git clone https://github.com/Azure-Samples/ms-identity-java-webapp.git
Arure portal에 접속하고 로그인합니다. 프로젝트를 등록하려는 Tenant에 연결된 상태여야 합니다.
상단 바 포털 메뉴 | 모든 서비스(All services) | Azure Active Directory | 속성(Properties)에서 이름(Name)과 디렉토리 ID(Directory ID | Tenant ID)를 확인합니다.
앱 등록(App registrations) | 새 등록(New registration)을 선택합니다.
이름(Name)과 지원하는 계정 유형(Supported account types)를 선택하고 등록합니다.
애플리케이션 개요(Overview) | Applications | 새로 등록한 애플리케이션 이름을 클릭합니다.
Application ID와 Directory ID를 확인합니다. 이 값은 나중에 샘플 코드를 실행하기 위한 환경 구성에 사용됩니다.
애플리케이션의 인증(Authentication) | 플랫폼 구성(Platform configurations)에서 웹(Web)을 추가합니다.
웹 항목이 구성되면 Web Redirect URIs | Add URI로 리다이렉션 URI를 추가합니다.
URI | 비고 |
샘플 코드의 로그인 페이지를 위한 리다이렉션입니다. | |
샘플 코드의 사용자 정보 페이지를 위한 리다이렉션입니다. |
애플리케이션의 인증서 및 암호(Certificates & Secrets) | 클라이언트 암호(Client Secrets section)으로 이동합니다.
새 클라이언트 암호(New client secret)에서 설명(Description)과 만료 일자(Expires)를 선택합니다.
암호를 등록하면 키 값(Value)과 암호 ID(Scerect ID)가 표시됩니다. 암호 정보는 나중에 프로젝트를 구성할 때 사용됩니다.
암호는 다시 표시되지 않으며 다른 방법으로도 검색 할 수 없습니다.
표시되는 내용을 기록 후 재사용하거나 암호를 분실하였다면 새로운 암호를 다시 생성하고 기존 프로젝트를 다시 구성해야합니다.
샘플 프로젝트 환경 설정
앞서 Azure AD 구성 과정에서의 테넌트 ID 애플리케이션 ID 키 값이 필요합니다.
샘플 프로젝트의 패키지 src/main/resources에서 application.properties 파일을 엽니다.
#AAD configuration
aad.clientId=Enter_the_Application_Id_here
aad.authority=https://login.microsoftonline.com/Enter_the_Tenant_Info_Here/
aad.secretKey=Enter_the_Client_Secret_Here
aad.redirectUriSignin=https://localhost:8443/msal4jsample/secure/aad
aad.redirectUriGraph=https://localhost:8443/msal4jsample/graph/me
aad.msGraphEndpointHost=https://graph.microsoft.com/
#SSL configuration
server.port=8443
server.servlet.session.cookie.secure=true
server.ssl.key-store=classpath:Enter_Key_Store_Here
server.ssl.key-store-password=Enter_Key_Store_Password_Here
server.ssl.key-store-type=Enter_Key_Store_Type_Here
server.ssl.key-alias=Enter_Key_Alias_Here
server.ssl.key-password=Enter_Key_Password_Here
코드 | 비고 | |
Azure AD 구성의 |
||
Azure AD 구성의 |
||
Azure AD 구성의 |
기본 리다이렉션 URI를 사용하지 않은 경우 aad.redirectUriSignin 및 aad.redirectUriGraph를 업데이트해야 합니다.
어떤 호스트 및 포트 번호라도 사용 할 수 있지만, 요청을 처리하는 컨트롤러와 매핑하기 위해 경로를 일치시킵니다.
코드 | 비고 | |
로컬 호스트에서 HTTPS를 사용하기 위해서 자체 서명된 인증서(Self-Signed certificate)가 필요합니다.
Java의 KeyTool 유틸리티를 사용하여 키 저장소(Keystore)를 생성합니다.
$ keytool -genkeypair -alias testCert -keyalg RSA -storetype PKCS12 -keystore keystore.p12 -storepass password
코드 | 비고 | |
인증서 |
||
인증서 |
||
인증서 |
||
인증서 |
인증서를 사용하여 나머지 구성을 완성합니다.
코드 | 비고 | |
모든 프로퍼티를 입력하면 application.properties는 다음과 같이 표시됩니다.
#AAD configuration
aad.clientId=*************************
aad.authority=https://login.microsoftonline.com/*************************/
aad.secretKey=*************************
aad.redirectUriSignin=https://localhost:8443/msal4jsample/secure/aad
aad.redirectUriGraph=https://localhost:8443/msal4jsample/graph/me
aad.msGraphEndpointHost=https://graph.microsoft.com/
#SSL configuration
server.port=8443
server.servlet.session.cookie.secure=true
server.ssl.key-store=/Users/namepgb/Desktop/azure/keystore.p12
server.ssl.key-store-password=password
server.ssl.key-store-type=PKCS12
server.ssl.key-alias=testCert
server.ssl.key-password=password
'Java > Java SE, EE' 카테고리의 다른 글
배열 int[]와 Integer[]간에 상호 캐스팅하기 (0) | 2023.12.07 |
---|---|
배열에서 중복되는 Element 제거하기(Set과 Stream) (0) | 2023.11.30 |
데이터 표현을 위한 Record 클래스 (0) | 2023.11.27 |
macOS에서 OpenJDK 17 버전 설치 (0) | 2023.11.07 |
객체 소멸자 finalize() vs 널(null) 할당을 통한 리소스 반환 (0) | 2022.04.19 |