Dre*_*ach 7 c# azure dotnet-httpclient .net-core azure-functions
我能够发布工作请求。第三方 API 让我们发送令牌(基本上是 Guid)作为不记名令牌。Azure 似乎对此进行了某种预验证。当我用真正随机生成的不记名令牌替换 GUID 时,它起作用了。
我仍然想知道是否有办法禁用此 Azure 签入功能。“坏”承载令牌适用于 GET 请求,但不适用于 POST/PUT 请求。
应用程序摘要 我们有 Azure 函数(即时间触发器、Orchestrator、活动),可以在 SQL 中查找本地队列表中的项目,然后通过 JSON 将其 POST 到第三方 API。
第三方 API 需要在 POST 请求中包含 Authorization 标头。
技术概述
附加信息
什么有效 所有 GET 请求。完全没有问题。
POST 请求不起作用。我将请求代理给蜂感受器,以准确查看收到的内容。当包含授权标头时,大多数标头都会被删除(即内容类型、内容长度),并且请求正文为空。
如果我删除了授权标头,则所有标头和正文都会按预期接收。
问题 我现在只能假设某些 Azure 服务、飞行前检查、安全策略正在拦截授权标头,认为它是用于“自身”的,但我完全不知道它可能是什么。我已经使用 Google 好几天了。
代码的简化版本
using var client = new HttpClient();
client.DefaultRequestHeaders.Clear();
// Request params are dynamic and a helper method builds the full request path
var path = PathBuilder(queueItem.RequestParams, queueItem.Request.UrlPath);
// This can change in code not shown if the request is sending files
var contentType = "application/json";
client.BaseAddress = new Uri(queueItem.Request.Client.BaseApiUrl);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue { NoCache = true };
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", queueItem.Request.Client.AuthToken);
// queueItem.Data is JSON
HttpContent json = new StringContent(queueItem.Data, Encoding.UTF8, contentType);
return await client.PostAsync(path, json);
Run Code Online (Sandbox Code Playgroud)
还...
小智 1
鉴于您\xe2\x80\x99已经尝试过的所有内容,这可能是一个不太可能的事情,但是您是否尝试过添加如下令牌:
\nclient.DefaultRequestHeaders.TryAddWithoutValidation(\xe2\x80\x9cAuthorization\xe2\x80\x9d, \xe2\x80\x9cbearer token here\xe2\x80\xa6\xe2\x80\x9d);\nRun Code Online (Sandbox Code Playgroud)\n然后检查尝试是否成功?
\n| 归档时间: |
|
| 查看次数: |
2215 次 |
| 最近记录: |