【问题标题】:Proper OAuth2 authentication flow for a web API using the EWS Managed API使用 EWS 托管 API 的 Web API 的正确 OAuth2 身份验证流程
【发布时间】:2017-05-05 02:36:20
【问题描述】:

我一直在阅读大量有关将 OAuth 与 Azure AD 结合使用的文档,但对于如何针对我的情况正确实施事情仍然感到完全困惑。希望有人能引导我朝着正确的方向前进。

我创建了一个 ASP.NET Web API 应用程序,它使用 EWS 托管 API 代表不同用户访问 Exchange。我的应用程序公开了诸如/Mailbox/Messages 和/Appointments 之类的端点,目的是某些前端Web 应用程序最终将使用它们来检索用户的电子邮件和约会。目前端点正在使用基本的 http 身份验证,但我想更新它们以使用 OAuth。该应用程序已在我的 Azure AD 实例中注册,并且我已将其配置为需要“通过 Exchange Web 服务以登录用户身份访问邮箱”API 权限。

由于前端还没有实现,我一直在尝试通过手动调用身份验证端点来进行测试。这会提示我登录并提供同意。如果我同意,我将被重定向到我在使用查询参数中包含的授权代码注册应用程序时提供的回调 URL。我仍然不太确定我应该如何使用此回调,但为了测试,我目前有回调将授权代码兑换为访问令牌。这是通过在AuthenticationContext 类的实例上调用AcquireTokenByAuthorizationCode 方法并提供我的应用程序的ID 和密码来完成的。同样,为了测试,我将访问令牌返回给浏览器。然后,我可以使用此访问令牌调用上述端点(经过一些修改)并获取用户的电子邮件。我猜这大部分不是正确的做事方式。

我的一些困惑:

  1. 我在 Azure AD 中注册的回调在获取授权码时实际上应该做什么?这是否适用于不同类型的应用程序?也许不仅仅是扮演中间人的角色。
  2. 我正在尝试使我的应用程序有点 RESTful,因此我不想在请求之间维护访问令牌。因此,我的端点期望在每个请求的身份验证标头中提供访问令牌是否有意义?如果是这样,这是否意味着前端应用程序应该负责获取访问令牌并将其传递给我?

作为 OAuth 和 Azure 的新手,我不确定是否有任何其他相关细节,但我可以根据需要提供更多信息。

【问题讨论】:

    标签: asp.net api azure authentication oauth


    【解决方案1】:

    您正在实施的是这种情况:https://docs.microsoft.com/en-us/azure/active-directory/active-directory-authentication-scenarios#daemon-or-server-application-to-web-api

    它是这样工作的:

    1. 您的客户端应用程序将用户重定向到在授权端点登录
    2. 您的客户端应用获取授权码(如果使用授权码授权流程,还有其他)
    3. 客户端应用程序为您的 API 应用程序交换代码以获取 访问令牌
      1. 它需要提供其客户端 ID 和密码以及代码和 API 的资源 URI 才能获取它
    4. 客户端应用调用您的 API 应用,在 Authorization 标头中传递访问令牌
    5. 然后,您的 API 应用会验证访问令牌,并从 Azure AD 为 Exchange API 请求另一个访问令牌
      1. 它将客户端应用发送的访问令牌连同其客户端 ID 和机密以及 Exchange API 的资源 URI 一起传递给 Azure AD
    6. 您的 API 应用会收到一个访问令牌,因此您可以作为用户调用 Exchange API

    回答你的两个问题:

    1. 授权码流不与 API 一起使用,仅与有用户登录的应用一起使用,因此重定向 URL 基本上从不使用
    2. 您的 API 可以而且必须期望并验证访问令牌,以便 it 出现在每个请求中。但它用于调用 Exchange API 的访问令牌可以而且应该缓存在 API 端。这是随 ADAL 开箱即用提供的,但令牌仅在内存中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多