如何通过SAML获取Azure AD用户的个人资料头像?
获取Azure AD SAML登录用户头像的解决方案
我之前做Azure AD SSO集成的时候也碰到过这个问题——默认的SAML声明里确实没有用户头像的相关属性,不过有两个靠谱的办法能解决:
方法一:通过Microsoft Graph API实时获取
这是最通用也最可靠的方式,步骤如下:
- 先确保你的应用在Azure AD里已经被授予
User.Read或者User.ReadBasic.All的API权限(去应用注册的「API权限」页面配置就行,记得要授予管理员同意) - 从SAML登录的响应里拿到用户的
objectId,这个属性一般默认会包含在声明里,如果没有的话,去企业应用的「用户属性与声明」里手动添加objectid作为输出声明 - 用拿到的
objectId调用Microsoft Graph的头像接口,示例请求如下:
GET https://graph.microsoft.com/v1.0/users/{user-object-id}/photo/$value Authorization: Bearer {你的应用访问令牌}
接口返回的是二进制图片数据,你可以直接在前端渲染或者后端保存后使用。
方法二:自定义SAML声明返回头像API URL(简化后续调用)
如果不想每次都手动拼接API地址,可以通过Azure AD的声明转换功能,把头像的Graph API URL直接作为自定义声明返回给应用:
- 登录Azure AD门户,进入你的目标企业应用
- 切换到「单一登录」页面,找到「用户属性与声明」选项
- 点击「添加新声明」,设置声明名称(比如
user_photo_url) - 源选择「转换」,然后在转换规则里输入:
https://graph.microsoft.com/v1.0/users/{user.objectid}/photo/$value - 保存后,用户下次登录时,SAML响应里就会带上这个URL,应用直接调用这个地址就能拿到头像(同样需要确保应用有对应的Graph API权限)
划重点:Azure AD的SAML声明没办法直接返回二进制的头像数据,所以要么实时调用API拿数据,要么返回API地址让应用后续调用,两种方式都依赖Microsoft Graph的权限配置。
内容的提问来源于stack exchange,提问作者Raghav
相关产品推荐
相关产品推荐

