c# - 如何以编程方式获取和设置 AzureAppProxyAccessCookie 以访问 Azure 应用程序代理后面的本地 API
问题描述
我正在尽我最大的努力来理解身份验证流程,但我仍然觉得我对为什么事情会这样发生有一些了解。
这是一个很长的解释,所以我将首先提出我的问题,以及我尝试过的事情的背景。任何帮助将不胜感激。
问题
- 为什么我通过 MSAL 获得的令牌不返回登录到您的帐户响应,并且不允许我访问 API?
- 为什么我需要设置 cookie AzureAppProxyAccessCookie以允许控制台应用程序代码通过 Azure 应用程序代理访问内部 API?
- 在诸如控制台应用程序之类的非交互式代码中,我将如何以编程方式获取并根据我的请求设置 AzureAppProxyAccessCookie?还是有不同的方法来实现这一目标?
背景 我希望能够从后台服务(如控制台应用程序)以编程方式调用 API,并检索数据以在其他地方处理。这是我目前的设置
- 获得了本地 API 并实现了 Azure AD 应用程序代理,以便可以通过 domainname.msappproxy.net 地址从外部访问它。
- 在 API PreAuthentication 的应用程序代理设置中设置为Azure Active Directory
- 在 AzurePortal 中,我已经在 API 和客户端上创建了 AppRegistrations,据我所知,我已经为非 Web 应用程序正确设置了它 - 根据我阅读的所有文档。从那里,我可以使用 MSAL 调用
AcquireTokenForClient(scopes)
成功检索令牌 - 使用 HttpClient 和 HttpRequestMessage 我调用 API,将 3) 中的令牌添加到标头中
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken)
。当我这样做并检查响应时,我总是看到登录您的帐户。
我仍然不确定为什么上述步骤不起作用,因为我希望它是一个非交互式进程,需要它在后台静默验证
在这个阶段,我尝试了不同的策略,并尝试在 Postman 中进行一些实验。在邮递员中,我尝试了以下
使用 Postman AzureAppProxyAccessCookie 的不成功实验
使用 NoAuth 向 API 发出请求。这将返回登录到您的帐户页面并设置一个名称类似于AzureAppProxyAnalyticCookie的 cookie
使用 Postman 的成功实验
- 我清除了所有 cookie 转到 Auth 选项卡,选择 OAuth 2.0 选择 GetNewAccessToken 和授权类型的授权代码并填写相关的客户端 ID、秘密等。我看到了登录对话框并成功记录了其中设置了一些 cookie
- 现在我已登录,我将 Auth 选项卡更改为 NoAuth 并再次向 API 发出请求,它现在设置了 2 个 cookie AzureAppProxyAnalyticCookie和AzureAppProxyAccessCookie,API 现在已成功调用并返回我期望的结果
回到控制台应用程序代码
在 Postman 取得成功后,我重新审视了代码。现在,我删除了令牌,而不是将 AzureAppProxyAccessCookie 添加到请求标头中。代码现在传递到内部 API 并返回我期望的结果。显然,访问 cookie 有某种效果,但我找不到太多关于它的文档
解决方案
推荐阅读
- sql - 根据列值从行组中选择行
- python - 为什么 asksaveasfilename 不返回文件类型?
- c# - C#将列表作为逗号分隔的字符串存储在字符串类型变量中,其中包含列表中项目的出现次数
- django - 如何在 Django Rest Framework 中设置双嵌套序列化程序
- unit-testing - 如何在 JEST 测试中模拟全局 Vue.js 变量
- powershell - 从命令提示符使用 PowerShell 命令运行 schtasks.exe
- html - 使用 Bootstrap 带有输入文本框的单选按钮
- wordpress - 在wordpress中更改URL后出现404?
- python - 在没有 pip 的情况下安装 lxml
- .htaccess - .htaccess 在托管 Windows