将 Azure Active Directory 标识与你自己的标识提供者链接 (预览版)

重要

由于服务升级,具有 全局 范围的新可操作消息提供程序的加入将暂时暂停到 2024 年 6 月 30 日。 现有的全球范围提供程序以及组织和测试范围提供程序的加入不受影响。 有关详细信息,请参阅 可操作消息的常见问题解答

可操作消息中的 Action.Http 操作在标头中包含 Authorization Azure AD 颁发的令牌,该令牌提供有关用户标识的信息。 但是,此信息可能不足以对服务的用户进行身份验证。 通过标识链接,你可以向 Outlook 客户端发出信号,显示 UI 以允许用户使用服务进行身份验证。 用户进行身份验证后,你可以将其 Azure AD 标识与你自己的标识相关联,以便为将来的请求进行无缝身份验证。

使用标识链接

服务可以通过返回带有ACTION-AUTHENTICATE标头的401 Unauthorized响应,在任何Action.Http操作终结点上触发身份验证。 标头包含服务的身份验证 URL。

身份验证完成后,将请求重定向到原始请求中发送的 Identity-Linking-Redirect-Url 标头中指定的 URL。

标识链接流

对操作终结点的初始请求

Microsoft 服务器向操作终结点发送初始 POST 请求。

POST https://api.contoso.com/myEndpoint
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6...
Identity-Linking-Redirect-Url: https://outlook.office.com/connectors/adelev@contoso.com/723a1c49-f8dc-4063-843e-d4c2b7180b8b/postAuthenticate
Content-Type: application/json

{
  // action body
}

服务 验证 JWT 令牌 ,并从 sub 声明中提取用户的标识。

{
  ...
  "sub": "AdeleV@contoso.com",
  "aud": "https://api.contoso.com"
}

你的服务找不到链接标识为 的用户, AdeleV@contoso.com 因此它会保留 Identity-Linking-Redirect-Url 标头值并返回 401 响应。

注意

用于保留标头中的重定向 URL 的 Identity-Linking-Redirect-Url 确切方法取决于实现。 例如,如果服务使用 OAuth,则可以将其保存在 参数中 state

HTTP/1.1 401 Unauthorized
ACTION-AUTHENTICATE: https://identity.contoso.com/authenticate?state=https://outlook.office.com/connectors/adelev@contoso.com/723a1c49-f8dc-4063-843e-d4c2b7180b8b/postAuthenticate

身份验证请求

Outlook 收到 401 带有 标头的 ACTION-AUTHENTICATE 后,它将打开一个任务窗格并导航到标头中的 URL。

GET https://identity.contoso.com/authenticate?state=https://outlook.office.com/connectors/adelev@contoso.com/723a1c49-f8dc-4063-843e-d4c2b7180b8b/postAuthenticate

服务对用户进行身份验证,并将 Azure AD 颁发的令牌提供的标识与系统中的用户相关联。 完成后,服务会将请求重定向到标头 Identity-Linking-Redirect-Url 中的 URL。

HTTP/1.1 302 Found
Location: https://outlook.office.com/connectors/adelev@contoso.com/723a1c49-f8dc-4063-843e-d4c2b7180b8b/postAuthenticate

重试操作

Outlook 从身份验证服务器接收回重定向后,会立即重试原始请求。 这一次,由于你已将 Azure AD 标识与你自己的标识相关联,因此终结点会正常处理请求。

示例

可以使用可操作消息Designer中的以下示例卡来了解此操作。 此卡中的终结点将提示你登录到Microsoft 标识平台,并在同意的情况下 () 发出 Graph 请求以获取个人资料GitHub 上提供了此终结点的代码作为示例。

{
  "hideOriginalBody": true,
  "type": "AdaptiveCard",
  "padding": "none",
  "body": [
    {
      "type": "TextBlock",
      "text": "Identity Linking Demo"
    },
    {
      "type": "ActionSet",
      "actions": [
        {
          "type": "Action.Http",
          "method": "POST",
          "url": "https://amidentitylinking.azurewebsites.net/action",
          "body": "{}",
          "title": "Get User Details",
          "isPrimary": true
        }
      ]
    }
  ],
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "version": "1.0"
}

客户端支持路线图

标识链接适用于一组有限的客户端,并且支持将来添加的功能。 下表提供了大致时间线。

客户端 可用性
Office 365 ProPlus 可用
Office 365 Outlook 网页版 即将推出
iOS 版 Outlook 即将推出
Android 版 Outlook 即将推出
Mac 版 Outlook 待定

资源