【发布时间】: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 和密码来完成的。同样,为了测试,我将访问令牌返回给浏览器。然后,我可以使用此访问令牌调用上述端点(经过一些修改)并获取用户的电子邮件。我猜这大部分不是正确的做事方式。
我的一些困惑:
- 我在 Azure AD 中注册的回调在获取授权码时实际上应该做什么?这是否适用于不同类型的应用程序?也许不仅仅是扮演中间人的角色。
- 我正在尝试使我的应用程序有点 RESTful,因此我不想在请求之间维护访问令牌。因此,我的端点期望在每个请求的身份验证标头中提供访问令牌是否有意义?如果是这样,这是否意味着前端应用程序应该负责获取访问令牌并将其传递给我?
作为 OAuth 和 Azure 的新手,我不确定是否有任何其他相关细节,但我可以根据需要提供更多信息。
【问题讨论】:
标签: asp.net api azure authentication oauth