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

**URL:** https://meta.discourse.org/t/updated-discourse-plugin-office365-auth-due-to-bug/167484
**Category:** SSO
**Created:** [10월 17, 2020, 10:48오후 UTC](https://meta.discourse.org/t/updated-discourse-plugin-office365-auth-due-to-bug/167484 "2020-10-17T22:48:53Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![IT-Sumpfling](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/it-sumpfling/32/197353_2.png) [@IT-Sumpfling](https://meta.discourse.org/u/IT-Sumpfling)
#### Post date: [10월 17, 2020, 10:48오후 UTC](https://meta.discourse.org/t/updated-discourse-plugin-office365-auth-due-to-bug/167484/1 "2020-10-17T22:48:53Z")

</div>

안녕하세요,

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

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

> **[GitHub - discourse/discourse-azure-ad](https://github.com/discourse/discourse-azure-ad)**
>
> Contribute to discourse/discourse-azure-ad development by creating an account on GitHub.

> **[GitHub - discourse/discourse-openid-connect: Allows an OpenID Connect provider to be used as an...](https://github.com/discourse/discourse-openid-connect)**
>
> Allows an OpenID Connect provider to be used as an authentication provider for Discourse

그리고

> **[GitHub - discourse/discourse-microsoft-auth](https://github.com/discourse/discourse-microsoft-auth)**
>
> Contribute to discourse/discourse-microsoft-auth development by creating an account on GitHub.

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

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

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

 ![grafik](https://global.discourse-cdn.com/meta/original/3X/e/c/ec747b9672f13d1c7e10a67f557c007d6b62df21.png)

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

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

> <https://github.com/discourse/discourse-microsoft-auth/blob/50e21994159574c29f66dfa272f643da451e37d2/plugin.rb#L21-L34>

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

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

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

 ![grafik](https://global.discourse-cdn.com/meta/original/3X/3/4/34c79e3f42657cca5a64dd0f007bfb2f50b8c684.png)

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

---

<div class="post-metadata">

### Author: ![IT-Sumpfling](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/it-sumpfling/32/197353_2.png) [@IT-Sumpfling](https://meta.discourse.org/u/IT-Sumpfling)
#### Post date: [10월 24, 2020, 9:32오전 UTC](https://meta.discourse.org/t/updated-discourse-plugin-office365-auth-due-to-bug/167484/2 "2020-10-24T09:32:45Z")

</div>

> [@IT-Sumpfling](#):
>
> 관련된 변경 사항은 제 GitHub 저장소에 있으며, pull request를 생성할 예정입니다. 하지만 아직 한 가지 문제가 남아 있습니다 ☹  
> 연결/취소 기능을 추가했더니 이제 사용자 프로필에 제공자(provider)가 표시되는데, 이름이 빠져 있네요?!
> 
> ![grafik](https://global.discourse-cdn.com/meta/original/3X/3/4/34c79e3f42657cca5a64dd0f007bfb2f50b8c684.png)
> 
> 이것을 어떻게 추가하나요? 관련 문서에 대한 링크가 있을까요? client.en.yml에 입력하는 것만으로는 충분하지 않은 것 같습니다 … 아니면 제가 다른 것을 놓치고 있는 건지 모르겠네요.  
> 이 문제를 해결한 후, 업데이트/수정된 제공자에 대한 pull request를 진행하는 것을 기꺼이 하겠습니다 …

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

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