초대 페이지에서 클라이언트 인증서를 사용하는 방법

안녕하세요,

저희는 ‘초대 전용’ Discourse 설치 환경을 사용하고 있습니다. 초대를 보내면, 초대받은 사용자가 브라우저에 특정 클라이언트 인증서가 존재하는 경우에만 초대 수락을 할 수 있도록 하고 싶습니다.

이를 어떻게 구현할 수 있을지 아이디어가 있을까요?

감사합니다. Harmstra

nginx 설정에 다음과 같은 내용이 포함되어 있어야 합니다:

ssl_client_certificate /path/to/ca.pem;
ssl_verify_client on;

초대(invite) 관련 요청에만 적용해야 한다면, 초대 수락 라우트를 포함하는 location 블록에서 이 설정을 수행해야 합니다.

@michaeld님,

인증서 필드를 사용해서 이를 사용자 인스턴스에 사용자 필드로 저장하는 것도 가능한가요? 예를 들어 만료일을 저장하고 싶은 경우, 그렇게 할 수 있을까요?

이건 어딘가 이상하게 복잡해 보입니다. 사용 사례가 무엇인가요?

동의합니다.

사용 사례는 다음과 같습니다. 여기에는 해당 클라이언트 인증서를 사용하여 기업 인증을 수행하는 조직이 있습니다. 해당 기업만 접근할 수 있는 Discourse 인스턴스를 생성하려고 합니다. @michaeld 님이 제공한 nginx 스니펫을 기준으로 보면 충분히 간단해 보입니다.

해당 인증서에는 기업 번호도 포함되어 있습니다. 이 번호를 가져와 Discourse 인스턴스에서 사용할 수 있도록 하려고 합니다. 이렇게 하면 기업 간에 서로를 쉽게 찾고, 기업 번호만으로 식별할 수 있습니다.

이제까지 설명이 명확했기를 바랍니다. 그렇지 않다면 편하게 질문해 주세요.

와. 내가 상상했던 것보다 훨씬 덜 어리석은 방법인 것 같네요!

그 회사 사람들이 회사 이메일 주소를 사용하도록 신뢰할 수 있을까요? 인증서를 읽을 수 있는 플러그인보다 훨씬 쉬울 것 같습니다. 만약 그 번호가 매우 중요하다면, 회사 번호로 역매핑할 수도 있습니다.

아래와 같은 한 줄을 사용하여 인증서를 Discourse에 전달할 수 있습니다.

proxy_set_header X-Cert-DN: $ssl_client_s_dn;

그 후 헤더에서 해당 값을 읽는 플러그인을 사용하는 것입니다.