使用 Exchange 的标识令牌对用户进行身份验证

重要

作为 Microsoft 安全未来计划的一部分,旧版 Exchange 用户标识令牌和回调令牌将于 2024 年 10 月关闭所有Exchange Online租户,该计划为组织提供了应对当前威胁环境所需的工具。 Exchange 用户标识令牌仍适用于本地 Exchange。 嵌套应用身份验证是今后令牌的建议方法。 有关详细信息,请参阅有关 嵌套应用身份验证和旧版 Exchange 令牌的博客文章

Exchange 用户标识令牌为加载项提供了一种以唯一的方式标识加载项用户的方法。 通过建立用户标识,可以为后端服务实现单一登录 (SSO) 身份验证方案,使使用 Outlook 外接程序的客户无需登录即可连接到你的服务。 有关何时使用此令牌类型的更多详细信息,请参阅 Exchange 用户标识令牌。 本文介绍了使用 Exchange 标识令牌对访问后端的用户进行身份验证的简单方法。

重要

这只是 SSO 实现的一个简单示例。 和以往一样,在处理标识和身份验证事宜时,一定要确保代码符合组织的安全要求。

通过每个请求发送 ID 令牌

第一步是通过调用 getUserIdentityTokenAsync 使加载项获取服务器中的 Exchange 用户标识令牌。 然后加载项通过向后端发出的每个请求发送该令牌。 它可能是在标头中,或在请求正文中。

验证令牌

后端必须在接受令牌之前对其进行验证。 这是确保令牌是由用户的 Exchange 服务器颁发的重要步骤。 有关验证 Exchange 用户标识令牌的信息,请参阅验证 Exchange 标识令牌

验证和解码后,令牌的有效负载如下所示:

{ 
    "aud" : "https://mailhost.contoso.com/IdentityTest.html",
    "iss" : "00000002-0000-0ff1-ce00-000000000000@mailhost.contoso.com",
    "nbf" : "1505749527",
    "exp" : "1505778327",
    "appctxsender":"00000002-0000-0ff1-ce00-000000000000@mailhost.context.com",
    "isbrowserhostedapp":"true",
    "appctx" : {
        "msexchuid" : "53e925fa-76ba-45e1-be0f-4ef08b59d389",
        "version" : "ExIdTok.V1",
        "amurl" : "https://mailhost.contoso.com:443/autodiscover/metadata/json/1"
    }
}

将令牌映射到后端的用户

后端服务可以根据令牌计算唯一的用户 ID 并将其映射到内部用户系统中的用户。 例如,如果使用数据库来存储用户,可以在数据库中将此唯一 ID 添加到用户的记录中。

生成唯一 ID

使用 和 amurl 属性的组合msexchuid。 例如,可以将两个值连接在一起,生成 Base 64 编码的字符串。 每次均可通过令牌生成此值,因此你可以将 Exchange 用户标识令牌映射回系统中的用户。

检查用户

生成唯一 ID 后,下一步就是查找系统中使用此关联 ID 的用户。

  • 如果能找到该用户,后端会将请求视为已经过身份验证并允许请求继续。

  • 如果找不到用户,后端将返回一个错误,指示用户需要登录。 然后加载项会提示用户使用现有的身份验证方法登录到后端。 一旦用户经过身份验证,将提交含用户身份验证详细信息的 Exchange 用户标识令牌。 然后后端可以使用唯一 ID 更新系统中的用户记录。