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 設定は、別々の API エンドポイントではなく、JSON データ内の場所を指します。

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

つまり、フィールド内の 3 つの要素を正しい構文で連結できないでしょうか?私の無謀な試みは、予想通り失敗しました。

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

(※これは明らかに藁にもすがる思いですが)