Contents
개요
SAML은 JWT기반이었던 OAuth/OpenID와 달리 XML을 기반으로 하며 각각 장단점이 있습니다.
OAuth/OpenID와 비교할 때 모바일 지원이 부족하고, JWT보다 덩치가 큰 XML을 이용함에서 오는 네트워크 대역폭, 학습곡선이 좀 더 높다는 점 등의 단점이 있다고 합니다.
그러나, 사실 네트워크 대역폭 차지 문제는 가정 환경의 소규모 서비스에서는 큰 문제가 될 수 없고, 학습곡선은… 어차피 다 처음 하는 것들인데요 =ㅅ=
여튼, 이와 관련해서 내용을 찾던 중, 이해하기 쉽게 잘 작성된 블로그가 있어 글 하단에 링크를 걸어두겠습니다.
Nextcloud와 연동하기
리버스 프록시 연결
이전 글과 같이 Nextcloud는 동일한 nextsample.fentanest.com을 사용합니다.
애플리케이션, Provider 생성하기
애플리케이션 – 공급자 – 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생성을 완료합니다.


애플리케이션 – 애플리케이션 – 생성 후 Provider와 매칭할 어플리케이션을 하나 생성해 줍니다.
이후, 시스템 – 인증서로 이동해 ‘검증 인증서’로 선택했던 인증서와 개인키, ‘서명 인증서’의 인증서 총 3개의 파일을 미리 다운로드 받아 놓습니다.
Nextcloud에 등록하기 위함입니다.


Nextcloud 설정하기
이전 글과 동일하게 config.php에 다음과 같은 설정이 있어야 합니다.
'overwriteprotocol' => 'https',
앱 – 통합 – SSO & SAML authentication를 활성화 해줍니다. 그 후 관리자 설정 – SSO 및 SAML 인증으로 이동해 내장 SAML 인증 사용으로 진행합니다.


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



- Nextcloud 데스크톱 클라이언트에 SAML 인증을 사용합니다(체크)
- [일반]UID 매핑 속성 : http://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파일
*메모장으로 열어서 복사-붙여넣기 - [속성 매핑]표시 이름 매핑 속성 :
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name - [속성 매핑]이메일 주소 매핑 속성 :
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress - [속성 매핑]사용자 그룹 매핑 속성 :
http://schemas.xmlsoap.org/claims/Group - 기타 그 외 보안 설정 체크
이후 설정을 완료하고 Nextcloud 주소를 접속하면 Authentik의 로그인 페이지가 나타납니다.
로그인을 시도하면 Nextcloud로 리다이렉트 되며 성공적으로 로그인을 수행하는 것을 확인할 수 있습니다.




추가 속성 매핑(quota)
SAML 로그인 시에도 계정 생성 시 할당 용량 제한이 가능합니다. Customization – 속성 매핑 – 생성으로 이동해서 SAML Property Mapping을 클릭합니다.
이름은 식별 가능할 정도의 이름을 자유롭게 붙여 주시고, SAML 특성 이름에 nextcloud_quota, 표현식은 아래와 같이 적습니다.
return user.group_attributes().get("nextcloud_quota", None)


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


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

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

만일 Authentik에서 SAML Property Mapping 속성을 아래처럼 구성한다면,
nextcloud_quota가 정의된 유저 혹은 그룹은 그 값을 따라가고, 해당 값이 정의되지 않은 유저는 일괄 50GB를 적용받게 됩니다.
return user.group_attributes().get("nextcloud_quota", "50G")
예를 들어, 방금 보여드린 테스트 계정을 다시 지우고, user 특성에서 nextcloud_quota를 지운 뒤 다시 로그인하며 계정 생성을 시도하면,

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

TrueCommand와 연동하기
TrueNAS를 모니터링하고 관리하는데 특화되어 있는 TrueCommand도 SAML을 지원합니다.
설치도 간단합니다.
리버스 프록시 연결
예시에서는 https://tcd.fentanest.com 주소를 사용하겠습니다.

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

- ACS URL : https://{TrueCommand 주소}/saml/acs
- 발급자 : truecommand-saml
- 서비스 공급자 바인딩 : 포스트
- 서명 인증서 : 아무거나
- NameID 속성 매핑 : Email
이 외의 값은 기본값으로 놔둔 채로 생성을 완료합니다.


애플리케이션 – 애플리케이션 – 생성으로 애플리케이션도 하나 생성해 줍니다.
그 다음 공급자로 돌아가면 관련 오브젝트 – 메타데이터 – 다운로드 URL복사 버튼이 있습니다. 해당 링크를 복사해 놓습니다.
예시에서는 아래와 같은 주소를 얻게 됩니다.
- https://authsample.fentanest.com/api/v3/providers/saml/11/metadata/?download


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

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



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


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

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

TrueCommand 설정하기
admin으로 로그인 한 뒤, 우측 상단 톱니바퀴 – Administration – Configure를 순차적으로 클릭합니다.
- Start the SAML service(체크)
- SAML Identity Provider URL : 위에서 복사한 주소 붙여넣기
- SAVE(클릭)


로그아웃 후 로그인 화면으로 돌아오면 아래처럼 SAML LOGIN버튼이 생성된 것을 확인할 수 있고,
CREATE USER를 클릭함으로써 받아온 정보로 계정 생성도 잘 이루어지는 것을 확인할 수 있습니다.



관련 글
Authentik으로 홈서버 SSO 구현하기 (1) – 설치
Authentik으로 홈서버 SSO 구현하기 (2) – LDAP
Authentik으로 홈서버 SSO 구현하기 (3) – OAuth/OpenID
Authentik으로 홈서버 SSO 구현하기 (5) – Proxy