You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Office.js获取Outlook登录用户的UPN(用户主体名称)

获取Outlook登录用户的UPN(用户主体名称) via Office.js

当然可以获取!你遇到的问题大概率是没正确解析getUserIdentityTokenAsync返回的令牌,或者权限配置不到位。下面给你两种可靠的解决方案:

方法1:解析用户身份令牌(JWT)

getUserIdentityTokenAsync返回的是一个JWT格式的身份令牌,里面就包含了UPN字段,只是需要你手动解码令牌的payload部分。

步骤:

  1. 确保你的Outlook插件manifest文件中配置了足够的权限,比如:
    <Permissions>ReadWriteMailbox</Permissions>
    
  2. 使用以下代码获取并解析令牌:
    Office.context.mailbox.getUserIdentityTokenAsync(function(result) {
      if (result.status === Office.AsyncResultStatus.Succeeded) {
        const idToken = result.value;
        // 拆分JWT的三个部分,取中间的payload段解码
        const payloadBase64 = idToken.split('.')[1];
        // 处理Base64的URL安全编码问题
        const decodedPayload = decodeURIComponent(atob(payloadBase64).split('').map(c => {
          return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
        }).join(''));
        const userInfo = JSON.parse(decodedPayload);
        const userUPN = userInfo.upn;
        console.log('用户UPN:', userUPN);
      } else {
        console.error('获取身份令牌失败:', result.error.message);
      }
    });
    

方法2:调用Microsoft Graph API

如果需要更全面的用户信息,也可以用getCallbackTokenAsync获取访问令牌,然后调用Graph的/me端点,其中userPrincipalName字段就是你要的UPN。

代码示例:

Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function(result) {
  if (result.status === Office.AsyncResultStatus.Succeeded) {
    const accessToken = result.value;
    fetch('https://graph.microsoft.com/v1.0/me', {
      headers: {
        'Authorization': `Bearer ${accessToken}`
      }
    })
    .then(res => res.json())
    .then(userData => {
      const userUPN = userData.userPrincipalName;
      console.log('用户UPN:', userUPN);
    })
    .catch(err => console.error('调用Graph API失败:', err));
  } else {
    console.error('获取回调令牌失败:', result.error.message);
  }
});

注意事项:

  • 这种方法需要在manifest中配置WebApplicationInfo,关联你的Azure AD应用,并申请User.Read权限。
  • 确保你的插件有权限调用Graph API。

关于userProfile的补充

你提到只能通过userProfile获取邮箱,确实在部分环境或权限较低的情况下,userProfile不会返回UPN字段,这时候上面两种方法就更可靠。

内容的提问来源于stack exchange,提问作者Deepak Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:45:49