개요

SAML은 JWT기반이었던 OAuth/OpenID와 달리 XML을 기반으로 하며 각각 장단점이 있습니다.

OAuth/OpenID와 비교할 때 모바일 지원이 부족하고, JWT보다 덩치가 큰 XML을 이용함에서 오는 네트워크 대역폭, 학습곡선이 좀 더 높다는 점 등의 단점이 있다고 합니다.

그러나, 사실 네트워크 대역폭 차지 문제는 가정 환경의 소규모 서비스에서는 큰 문제가 될 수 없고, 학습곡선은… 어차피 다 처음 하는 것들인데요 =ㅅ=

여튼, 이와 관련해서 내용을 찾던 중, 이해하기 쉽게 잘 작성된 블로그가 있어 글 하단에 링크를 걸어두겠습니다.

Nextcloud와 연동하기

리버스 프록시 연결

이전 글과 같이 Nextcloud는 동일한 nextsample.fentanest.com을 사용합니다.

애플리케이션, Provider 생성하기

애플리케이션 – 공급자 – SAML Provider 를 순차적으로 클릭합니다.

Authentik의 공급자 메뉴에서 새로운 SAML Provider를 생성하기 위해 항목을 선택하는 화면
  • 이름 : 식별 가능한 선에서 자유롭게
  • 인증 플로우 : default-authentication-flow
  • 인가 플로우 :default-provider-authorization-implicit-consent
  • ACS URL : *https://{nextcloud 주소}/apps/user_saml/saml/acs*
  • 발급자 : *https://{authentik 주소}*
  • 서비스 공급자 바인딩 : 포스트
  • 수신처 : *https://{nextcloud 주소}/apps/user_saml/saml/metadata*
  • 서명 인증서 : 아무거나 무관
  • 검증 인증서 : 서명인증서 외의 것
  • 속성 매핑 : 전부 선택
  • Name ID 속성 매핑 : User ID

그 외의 값은 기본값으로 놔둔채로 Provider생성을 완료합니다.

Nextcloud 연동을 위해 Authentik의 SAML 공급자 설정에서 이름과 인가 플로우를 입력하는 화면 SAML 공급자 설정의 속성 매핑과 Name ID 속성 매핑을 완료하고 생성을 진행하는 화면

애플리케이션 – 애플리케이션 – 생성 후 Provider와 매칭할 어플리케이션을 하나 생성해 줍니다.

이후, 시스템 – 인증서로 이동해 ‘검증 인증서’로 선택했던 인증서와 개인키, ‘서명 인증서’의 인증서 총 3개의 파일을 미리 다운로드 받아 놓습니다.

Nextcloud에 등록하기 위함입니다.

생성한 SAML 공급자와 매칭할 어플리케이션을 시스템에 새로 추가하는 화면 Nextcloud 등록에 필요한 서명 인증서와 검증 인증서 그리고 개인 키 파일을 다운로드하는 화면

Nextcloud 설정하기

이전 글과 동일하게 config.php에 다음과 같은 설정이 있어야 합니다.

'overwriteprotocol' => 'https',

앱 – 통합 – SSO & SAML authentication 를 활성화 해줍니다. 그 후 관리자 설정 – SSO 및 SAML 인증 으로 이동해 내장 SAML 인증 사용 으로 진행합니다.

Nextcloud 관리자 설정의 내장 SAML 인증 사용 메뉴에서 데스크톱 클라이언트 옵션을 체크하는 화면 Nextcloud의 UID 매핑 속성을 지정하고 서비스 공급자의 인증서와 개인 키를 복사하여 등록하는 화면

아래와 같은 양식을 채워야 합니다.

Authentik 주소와 SSO URL을 Nextcloud SAML 설정의 인증 공급자 데이터에 입력하는 화면 Nextcloud SAML 속성 매핑 설정에서 표시 이름과 이메일 및 사용자 그룹 속성 주소를 지정하는 화면 Nextcloud 내장 SAML 인증의 기타 보안 설정 옵션을 확인하고 설정을 마무리하는 화면
  • Nextcloud 데스크톱 클라이언트에 SAML 인증을 사용합니다(체크)
  • [일반]UID 매핑 속성 : *https://schemas.goauthentik.io/2021/02/saml/username*
  • [일반]인증 공급자 표시 이름 : 내부 용도, 자유
  • [서비스 공급자 데이터 ]이름 ID 포맷 : X509 subject name
  • [서비스 공급자 데이터 ]서비스 공급자의 X.509 인증서 : 다운로드 받은 검증 인증서의 pem파일
    *메모장으로 열어서 복사-붙여넣기
  • [서비스 공급자 데이터 ]서비스 공급자의 개인 키 : 다운로드 받은 검증 인증서의 key파일
    *메모장으로 열어서 복사-붙여넣기
  • [인증 공급자 데이터]IdP 엔티티 식별자 : https://{Authentik 주소}
  • [인증 공급자 데이터]SP에서 인증 요청 메시지를 보낼 IdP 대상 URL :
    공급자의 SSO URL (Redirect)
  • [인증 공급자 데이터]SP에서 SLO 요청 메시지를 보낼 IdP 대상 URL :
    공급자의 SLO URL (Redirect)
  • [인증 공급자 데이터]IdP의 공개 X.509 인증서 : 다운로드 받은 서명 인증서의 pem파일
    *메모장으로 열어서 복사-붙여넣기
  • [속성 매핑]표시 이름 매핑 속성 :
    *https://schemas.xmlsoap.org/ws/2005/05/identity/claims/name*
  • [속성 매핑]이메일 주소 매핑 속성 :
    *https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress*
  • [속성 매핑]사용자 그룹 매핑 속성 :
    *https://schemas.xmlsoap.org/claims/Group*
  • 기타 그 외 보안 설정 체크

이후 설정을 완료하고 Nextcloud 주소를 접속하면 Authentik의 로그인 페이지가 나타납니다.

로그인을 시도하면 Nextcloud로 리다이렉트 되며 성공적으로 로그인을 수행하는 것을 확인할 수 있습니다.

Nextcloud 주소로 접속 시 Authentik 로그인 페이지로 리다이렉트되어 사용자 인증을 요청하는 화면 Authentik 로그인을 성공적으로 마친 후 Nextcloud 메인 대시보드로 접속된 화면 Nextcloud 사용자 프로필에서 SAML 연동을 통해 로그인한 계정 정보를 확인하는 화면 Nextcloud 연동 시 기본적으로 할당된 계정의 용량을 확인하는 화면

추가 속성 매핑(quota)

SAML 로그인 시에도 계정 생성 시 할당 용량 제한이 가능합니다. Customization – 속성 매핑 – 생성 으로 이동해서 SAML Property Mapping 을 클릭합니다.

이름은 식별 가능할 정도의 이름을 자유롭게 붙여 주시고, SAML 특성 이름에 nextcloud_quota, 표현식은 아래와 같이 적습니다.

return user.group_attributes().get("nextcloud_quota", None)
SAML 로그인 시 할당 용량 제한을 위해 Authentik 속성 매핑 생성 메뉴를 선택하는 화면 Authentik에서 SAML 특성 이름에 nextcloud_quota를 입력하고 파이썬 표현식을 작성하는 화면

그리고 Authentik의 Provider에서 속성 매핑에 새로 생성한 요소를, Nextcloud의 관리자 설정 – SSO 및 SAML 인증 – 속성 매핑에서 할당량 매핑 속성을 각각 추가 합니다.

Nextcloud의 관리자 설정 중 속성 매핑 항목에서 할당량 매핑 속성에 nextcloud_quota를 추가하는 화면 Authentik 사용자 및 그룹 특성에서 특정 유저에게 nextcloud_quota 항목을 지정하는 화면

이후, 해당 quota를 적용할 유저 혹은 그룹의 특성에 아래와 같이 nextcloud_quota 항목을 지정하면 됩니다. 예시는 80GB입니다.

사용자 특성에 추가된 nextcloud_quota 항목에 80GB의 용량 제한 값을 입력하는 화면

아래와 같이 용량 할당이 제대로 이루어진 것을 확인할 수 있습니다.

용량 제한이 설정된 계정으로 Nextcloud에 로그인하여 80GB가 정상적으로 할당되었는지 확인하는 화면

만일 Authentik에서 SAML Property Mapping 속성을 아래처럼 구성한다면,

nextcloud_quota가 정의된 유저 혹은 그룹은 그 값을 따라가고, 해당 값이 정의되지 않은 유저는 일괄 50GB를 적용받게 됩니다.

return user.group_attributes().get("nextcloud_quota", "50G")

예를 들어, 방금 보여드린 테스트 계정을 다시 지우고, user 특성에서 nextcloud_quota를 지운 뒤 다시 로그인하며 계정 생성을 시도하면,

nextcloud_quota가 정의되지 않은 사용자를 위한 일괄 용량 제한 파이썬 표현식을 작성하는 화면

아래처럼 50GB의 용량이 할당되는 것을 확인할 수 있습니다.

용량 제한 속성을 지운 테스트 계정으로 다시 로그인 시 50GB의 기본 용량이 할당된 것을 확인하는 화면

TrueCommand와 연동하기

TrueNAS를 모니터링하고 관리하는데 특화되어 있는 TrueCommand도 SAML을 지원합니다.

설치도 간단합니다.

리버스 프록시 연결

예시에서는 https://tcd.fentanest.com 주소를 사용하겠습니다.

TrueCommand를 모니터링하고 관리하기 위해 리버스 프록시 연결 설정을 확인하는 화면

애플리케이션, Provider 생성하기

애플리케이션 – 공급자 – SAML Provider 를 순차적으로 클릭합니다.

TrueCommand와 연동하기 위해 Authentik의 공급자 메뉴에서 SAML Provider를 선택하는 화면
  • ACS URL : https://{TrueCommand 주소}/saml/acs
  • 발급자 : truecommand-saml
  • 서비스 공급자 바인딩 : 포스트
  • 서명 인증서 : 아무거나
  • NameID 속성 매핑 : Email

이 외의 값은 기본값으로 놔둔 채로 생성을 완료합니다.

TrueCommand SAML 연동을 위해 공급자 설정에서 ACS URL과 발급자 정보를 입력하는 화면 TrueCommand SAML 공급자의 바인딩을 포스트로 지정하고 서명 인증서와 속성 매핑을 완료하는 화면

애플리케이션 – 애플리케이션 – 생성 으로 애플리케이션도 하나 생성해 줍니다.

그 다음 공급자로 돌아가면 관련 오브젝트 – 메타데이터 – 다운로드 URL복사 버튼이 있습니다. 해당 링크를 복사해 놓습니다.

예시에서는 아래와 같은 주소를 얻게 됩니다.

https://authsample.fentanest.com/api/v3/providers/saml/11/metadata/?download

TrueCommand와 연동할 어플리케이션을 생성하기 위해 관련 메타데이터 다운로드 링크를 복사하는 화면 복사한 메타데이터 다운로드 링크를 브라우저에 입력하여 TrueCommand용 XML 설정값을 확인하는 화면

추가 속성 매핑하기(필수)

TrueCommand에서는 Customization – 속성 매핑 에서 필수적으로 3가지 값을 지정해야 합니다.

TrueCommand 연동 시 필수적인 속성값을 지정하기 위해 Authentik에서 속성 매핑 메뉴를 선택하는 화면

아래 3가지를 각각 입력해 줍니다.

SAML 특성 이름에 username을 입력하고 파이썬 표현식을 작성하여 매핑하는 화면 SAML 특성 이름에 email을 입력하고 이메일 정보를 매핑하기 위해 파이썬 표현식을 작성하는 화면 SAML 특성 이름에 first_name을 입력하고 첫 번째 이름 정보를 추출하는 파이썬 표현식을 작성하는 화면

그리고 필수는 아니지만, 선택적으로 넣을 수 있는 2가지 값도 같이 생성해 줍니다.

SAML 특성 이름에 last_name을 입력하고 마지막 이름 정보를 매핑하는 파이썬 표현식을 작성하는 화면 SAML 특성 이름에 group을 입력하고 사용자 그룹 정보를 가져오는 파이썬 표현식을 작성하는 화면

모두 생성했다면, 아래처럼 5개의 속성 매핑이 생성되어야 합니다.

TrueCommand를 위해 생성된 총 5개의 SAML 속성 매핑 항목 리스트를 확인하는 화면

이후, 공급자에서 해당 속성 매핑들을 추가해 주어야 합니다.

TrueCommand용 SAML 공급자 설정 화면으로 돌아가 새로 생성한 속성 매핑 항목들을 모두 추가하는 화면

TrueCommand 설정하기

admin으로 로그인 한 뒤, 우측 상단 톱니바퀴 – Administration – Configure 를 순차적으로 클릭합니다.

  • Start the SAML service(체크)
  • SAML Identity Provider URL : 위에서 복사한 주소 붙여넣기
  • SAVE(클릭)
TrueCommand에 관리자 계정으로 로그인한 뒤 환경 설정 메뉴로 진입하는 화면 TrueCommand SAML 설정에서 서비스 시작을 체크하고 메타데이터 URL을 붙여넣어 활성화하는 화면

로그아웃 후 로그인 화면으로 돌아오면 아래처럼 SAML LOGIN버튼이 생성된 것을 확인할 수 있고,

CREATE USER를 클릭함으로써 받아온 정보로 계정 생성도 잘 이루어지는 것을 확인할 수 있습니다.

설정 완료 후 TrueCommand 로그인 화면으로 돌아와 새로 생성된 SAML 로그인 버튼을 확인하는 화면 SAML 로그인 버튼을 클릭하여 Authentik 인증 페이지로 리다이렉트되어 사용자 인증을 진행하는 화면 인증을 마치고 TrueCommand 계정이 성공적으로 자동 생성되어 메인 대시보드에 접속한 화면