Microsoft Graph Oauth2로 사용자 아바타 설정하기

친구들 같은 Discourse 커뮤니티 여러분, 안녕하세요.

discourse-oauth2-basic 플러그인을 사용하여 회원들이 Office365 조직 계정으로 로그인하고 이메일, 전체 이름, 사용자 이름 값을 자동으로 채우도록 설정했습니다. 그런데 아바타를 자동으로 채우는 데 어려움을 겪고 있어, 성공적으로 구현해 보신 분이 계신지 궁금합니다.

여기 있는 Graph 가이드에 따르면 아바타 URL은 photo/$value에서 사용 가능하다고 하는데, 해당 값을 입력해 두었지만 반환되지 않고 로그에서도 에러가 보이지 않습니다.

현재 설정은 다음과 같습니다:

…또한 oauth2 callback user info paths와 oauth2 authorize options 필드에 'photo’를 추가해 보았지만 효과가 없었습니다. 도움이 주시면 감사하겠습니다 :wink:

OAuth2 플러그인은 단일 엔드포인트(oauth2 user json url)에서 데이터를 요청하는 것만 허용합니다. 모든 json *** path 설정은 JSON 데이터 내부의 위치를 가리키며, 별도의 API 엔드포인트를 의미하지 않습니다.

graph.microsoft.com API 문서를 간단히 살펴보면, /me 엔드포인트에는 기본적으로 아바타 URL이 포함되어 있지 않은 것으로 보입니다. profilePhoto 리소스를 가져오는 것이 가능하다 해도, URL이 아닌 "사진 ID"를 반환하는 것으로 보입니다.

따라서 불행히도 이 기능을 구현하려면 사용자 정의 인증 플러그인을 개발해야 할 것 같습니다 :cry:. 하지만 틀렸다는 것을 증명해 주셨으면 좋겠습니다!

@david, 확인해 주셔서 감사합니다. 덕분에 사용자 JSON에 'fetch’할 수 있는지 살펴봤는데, 아쉽게도 OData expand 쿼리 파라미터는 사진에는 지원되지 않는 것 같습니다. 대신 /$value를 추가하면 URL로 반환되긴 합니다:

…user/photo 관계에는 $expand를 사용할 수 없습니다.

이를 역으로 적용하는 방법을 찾지 못했습니다. 그래서 https://graph.microsoft.com/beta/me?$expand=photo 대신 https://graph.microsoft.com/beta/me/photo/$value?$expand=mail,displayName처럼 시도해 봤습니다. 어쭙잖은 시도, 장난감 꺼내기, 투정 부리기.

아마도 JSON 데이터의 ‘mail’ 위치를 사용해 사진 URL을 구성할 수 있을 것 같습니다. URL은 일관되게 다음과 같은 형식입니다:

https://tenant-my.sharepoint.com/User%20Photos/Profile%20Pictures/adam_pope_arup_com_LThumb.jpg

..그러면 필드의 세 요소를 적절한 문법으로 연결할 수 있을까요? 제 어설픈 시도는 당연히 작동하지 않았습니다:

“https://tenant-my.sharepoint.com/User%20Photos/Profile%20Pictures/” & mail & “_LThumb.jpg”

…또는 다른 방법이 있을까요? 저는 분명히 허공을 움켜쥐고 있는 것 같습니다. oauth2 사용자 JSON url 필드에 사진 엔드포인트를 다음과 같은 형태로 추가하는 방식은 어떨까요:

https://graph.microsoft.com/v1.0/me?https://graph.microsoft.com/v1.0/me/photo