我有一个有趣的难题,我真的可以使用一些专家建议。
我有一个多线程C#Azure函数,该函数使用应用程序主体登录服务管理器终结点并收集多个订阅中的监视信息。它很棒……一次!在随后的运行中,四个小时后,我登录并获取了一个令牌(我希望它与运行中的令牌相同),像以前一样,使用令牌头设置一个新的HttpClient,然后尝试访问端点。每个人都“未经授权”回来。
我尝试将ApiHelper的静态实例更改为针对每次运行初始化的实例,以防一个实例覆盖另一个人的令牌的情况。我也可以在一个实例上在笔记本电脑上进行复制,所以这不是线程。
获取令牌的代码非常简单:
ClientCredential applicationCredentials = new ClientCredential(this.AADClientId, this.AADClientKey);
resultobject = await this.AuthContext.AcquireTokenAsync(this.ResourceUrl, applicationCredentials);
设置客户端标头的代码如下:
this.WebClient = new HttpClient();
this.WebClient.BaseAddress = baseAddress;
this.WebClient.DefaultRequestHeaders.Remove("Authorization");
this.WebClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {token}");
this.WebClient.DefaultRequestHeaders
.Accept
.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue(@"application/json")); // ACCEPT header
然后,我将相同的webClient传递给每个获得监视器的任务。
正如我所说的,它从头到尾一直很好。下次执行该功能时,所有内容均未经授权。我想我的下一步是开始创建测试功能并深入进行登录测试,但是喜欢它的人可以指出可能导致此问题的任何明显失误。