버그로 인해 discourse-plugin-office365-auth가 업데이트되었나요?

안녕하세요,

오늘 포럼 인증을 AzureAD / O365로 확장해 보려고 했습니다. (내부 AD에 대한 SAML은 이미 설정되어 있지만, 점점 더 많은 사용자가 AzureAD로 이동하고 있습니다.)

이를 수행할 수 있는 3가지 제공자를 시도해 보았습니다:

그리고

불행히도 discourse-azure-ad은 아무 동작도 하지 않았습니다. 로그인/가입 화면에 버튼조차 표시되지 않았습니다.

openid-connect은 작동했지만, "모든 테넌트(all tenants)"용 Azure 엔드포인트( https://login.microsoftonline.com/organizations/v2.0/.well-known/openid-configuration )의 특성상 “issuer” URI에 …/{tenantid}/…가 반환되어, 이는 우리 자체의 AzureAD/Office365 테넌트에 속한 사용자(다른 테넌트의 사용자는 아님)에게만 작동합니다.

따라서 Office365-Auth 플러그인이 마지막 선택지였습니다.
이것은 작동했지만(다른 AzureAD 테넌트의 사용자도 포함하여), AzureAD 로그인 이메일이 (이미 존재하는) Discourse 사용자의 기본 이메일이 아닐 때 로그인이 실패하는 버그가 있었습니다:
예를 들어:

가입 시 로그인과 사용자가 매칭되도록 두 번째 주소를 추가해야 했지만, 해당 주소가 “보조” 상태인 한, 로그인은 오류(“이 작업을 수행할 권한이 없습니다”)와 함께 실패했습니다(가입은 성공했습니다!).
또한, 제공자는 사용자 화면에서 새 로그인을 "연결(associate)"할 수 없었습니다(멋진 새로운 기능 :)).

이메일 로그인 문제를 이 코드 부분에 빠르게 식별했습니다:

ruby와 discourse에 충분히 익숙하지 않아 단정할 수는 없지만, 이 코드는 이메일 중 하나가 일치하지 않을 때마다 기본 이메일을 업데이트하려고 시도할 것이라고 생각합니다(여러 이메일이 존재하고 기본 이메일이 O365의 것이 아닐 경우 실패합니다).

그럼에도 불구하고, openid-connect은 이 부분을 올바르게 처리했으며, 이메일을 업데이트할지(또는 하지 않을지) 설정하고 사용자 화면에서 로그인을 연결할 수 있는 옵션을 제공했습니다. 그래서 저는 openid-connect에서 관련 줄을 무례하게도 office365-auth로 복사하고, office365-auth의 "after_authenticate"를 주석 처리하여 모든 AzureAD 테넌트에서 작동하는 로그인과 이메일이 사용자의 이메일 중 하나인 경우의 연결 기능을 확보했습니다.

관련 변경 사항은 제 Github 저장소에 있으며, pull request를 생성할 것입니다. 하지만 여전히 남은 문제가 하나 있습니다 :frowning:
연결/해제 기능을 추가했기 때문에 이제 제공자가 사용자 프로필에 표시되지만, 이름이 없습니다?!

이를 어떻게 추가하나요? 관련 문서에 대한 링크가 있을까요? client.en.yml에 입력하는 것만으로는 충분하지 않은 것 같습니다 … 아니면 제가 다른 것을 놓치고 있는 것입니다.
이것을 수정한 후에는 업데이트/수정된 제공자를 위한 pull request를 기꺼이 수행하겠습니다 …

아, 잊어버리세요. 마지막(관련) 변경 사항 이후 ./launcher rebuild app을 실행하는 것을 잊어버렸던 것 같습니다 :frowning:

또한 OAuth2Authenticator에서 ManagedAuthenticator로 변경할 때 실수를 한 것 같기도 합니다 → 그래서 다시 프로그래밍 보드로 돌아가야겠습니다. 이 문제가 정말로 해결되면(연결은 작동했지만 취소는 작동하지 않았습니다) 다시 게시하겠습니다.