如何以编程方式获取和设置 AzureAppProxyAccessCookie 以访问 Azure 应用程序代理背后的本地 API

问题描述 投票:0回答:1

我正在尽力了解此身份验证流程,但仍然觉得我对事情为何会这样发生有一些理解。

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

问题

  • 为什么我通过 MSAL 获取的令牌返回“登录到您的帐户”响应,并且不允许我访问 API?
  • 为什么需要设置 cookie AzureAppProxyAccessCookie 以允许控制台应用程序代码通过 Azure 应用程序代理访问内部 API?
  • 在非交互式代码(例如控制台应用程序)中,我如何以编程方式获取然后根据我的请求设置 AzureAppProxyAccessCookie?或者有其他方法可以实现这一目标吗?

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

  1. 拥有本地 API 并实施了 Azure AD 应用程序代理,以便可以通过 domainname.msappproxy.net 地址从外部访问它。
  2. 在 API 预身份验证的应用程序代理设置中设置为 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,转到“身份验证”选项卡,选择了 OAuth 2.0,选择了 GetNewAccessToken 和授权代码的授予类型,并填写了相关的客户端 ID、密码等。我看到了登录对话框并成功登录,其中设置了许多 cookie
  2. 现在我已登录,我将 Auth 选项卡更改为 NoAuth 并再次向 API 发出请求,现在它设置了 2 个 cookie AzureAppProxyAnalyticCookieAzureAppProxyAccessCookie 并且 API 现在已成功调用并返回我期望的结果

返回控制台应用程序代码

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

c# .net azure oauth azure-active-directory
1个回答
0
投票

在获取令牌时使用范围作为 {{AppProxyClientID}}/user_impersonation,它将与 Azure 令牌一起使用,而不需要邮递员的 AppProxyAccessCookie。

© www.soinside.com 2019 - 2024. All rights reserved.