如何获取用户的 exchange/outlook/office365 照片?

How to get user's exchange/outlook/office365 photo?

我们公司使用 Office 365。所以当用户登录我的 asp.net mvc 网站时,我想显示他们的照片,就像 Outlook 一样。

outlook 从哪里获取用户的照片?我如何以编程方式实现它?

我尝试访问 ActiveDirectory 并获取缩略图照片,但对于大多数用户来说它是空白的。因此,Outlook 必须在其他地方获取它。在哪里以及如何?

我还看到了一些使用 Microsoft.Office.Interop.Outlook 程序集的示例(假设它需要安装 Outlook 才能运行)。但是,此网站运行在未安装 Outlook 的服务器上。

I've tried hitting up the ActiveDirectory and fetching the thumbnailPhoto, but it's blank for most users. Thus Outlook must be getting it elsewhere. Where and how?

用户照片在您的 AD内部部署不可用,因为您的用户很可能没有将其存储在第一名,除非您为他们提供了将其写入 AD 的应用程序。

用户照片 在您的 ADAzure 中可用,因为您的用户很可能在 Outlook(或在线)中应用他们的照片.

我假设您的本地 AD 正在通过 DirsyncADConnect 实用程序与 Azure AD 同步。如果是,那么实际上 photothumbnailphoto 属性仅以一种方式同步(从内部部署到 Azure)并且不会写回。参考 here for DirSync and here for ADConnect.

这就是您无法从 AD 中删除它的原因。

How to get user's exchange/outlook/office365 photo?

有很多方法可以从 Azure AD 获取照片:

  1. Exchange Web 服务 (EWS): 通过使用 GetUserPhoto operation. Basically sending a SOAP envelope with the email address and size. the XML response will get you the base64-encoded photo contained in the PictureData 元素

  2. Exchange Web 服务(EWS 托管 API and/or REST API): 基本上使用自动发现服务来URL https://outlook.office365.com/ews/exchange.asmx,然后通过 Microsoft.Exchange.WebServices.Data 命名空间上的 EWS.Service.ConnectToService 方法进行连接,您需要为其引用库(一个 DLL,您可以 download from here)。方法保持不变 GetUserPhoto 并且图像以二进制形式包含在响应中。

  3. Outlook REST API: 基本上向 Outlook API (使用不记名访问令牌) 在 URL https://outlook.office.com/api/{version}/me/photo 为您自己,并在 URL https://outlook.office.com/api/{version}/users/email@example.com/photo。您将获得二进制格式的照片流作为响应。不要忘记附加 $value 以获取 blob,否则您将获得元数据。 More details referenced here.

  4. Office 365 统一 API(又名图形): 基本上与旧版 API 几乎相同。将 GET 请求(带有不记名令牌)发送到 URL https://graph.microsoft.com/{version}/me/photo/ 以获取您自己的照片,并向 https://graph.microsoft.com/{version}/users/UPN/photo 发送另一个用户的请求。或多或少相同。 More details referenced here. There is also a sandbox here for you to explore the samples and API references. You can also try it out yourself online interactively here在触发您的获取请求之前不要忘记登录

希望对您有所帮助。

更多参考资料:here, here and here.