首页 > 解决方案 > 如何以编程方式获取和设置 AzureAppProxyAccessCookie 以访问 Azure 应用程序代理后面的本地 API

问题描述

我正在尽我最大的努力来理解身份验证流程,但我仍然觉得我对为什么事情会这样发生有一些了解。

这是一个很长的解释,所以我将首先提出我的问题,以及我尝试过的事情的背景。任何帮助将不胜感激。

问题

背景 我希望能够从后台服务(如控制台应用程序)以编程方式调用 API,并检索数据以在其他地方处理。这是我目前的设置

  1. 获得了本地 API 并实现了 Azure AD 应用程序代理,以便可以通过 domainname.msappproxy.net 地址从外部访问它。
  2. 在 API PreAuthentication 的应用程序代理设置中设置为Azure Active Directory
  3. 在 AzurePortal 中,我已经在 API 和客户端上创建了 AppRegistrations,据我所知,我已经为非 Web 应用程序正确设置了它 - 根据我阅读的所有文档。从那里,我可以使用 MSAL 调用AcquireTokenForClient(scopes)成功检索令牌
  4. 使用 HttpClient 和 HttpRequestMessage 我调用 API,将 3) 中的令牌添加到标头中request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken)。当我这样做并检查响应时,我总是看到登录您的帐户。

我仍然不确定为什么上述步骤不起作用,因为我希望它是一个非交互式进程,需要它在后台静默验证

在这个阶段,我尝试了不同的策略,并尝试在 Postman 中进行一些实验。在邮递员中,我尝试了以下

使用 Postman AzureAppProxyAccessCookie 的不成功实验

使用 NoAuth 向 API 发出请求。这将返回登录到您的帐户页面并设置一个名称类似于AzureAppProxyAnalyticCookie的 cookie

使用 Postman 的成功实验

  1. 我清除了所有 cookie 转到 Auth 选项卡,选择 OAuth 2.0 选择 GetNewAccessToken 和授权类型的授权代码并填写相关的客户端 ID、秘密等。我看到了登录对话框并成功记录了其中设置了一些 cookie
  2. 现在我已登录,我将 Auth 选项卡更改为 NoAuth 并再次向 API 发出请求,它现在设置了 2 个 cookie AzureAppProxyAnalyticCookieAzureAppProxyAccessCookie,API 现在已成功调用并返回我期望的结果

回到控制台应用程序代码

在 Postman 取得成功后,我重新审视了代码。现在,我删除了令牌,而不是将 AzureAppProxyAccessCookie 添加到请求标头中。代码现在传递到内部 API 并返回我期望的结果。显然,访问 cookie 有某种效果,但我找不到太多关于它的文档

标签: c#.netazureoauthazure-active-directory

解决方案


推荐阅读