Azure 在公司代理网络内的WebAPI中运行时ADAL[AquireTokenAsync]超时
我们在asp.net web api应用程序中遇到了Azure广告库的一个非常奇怪的问题。当我们尝试使用带有证书的AcquireTokenAsync获取令牌时,没有响应,然后超时 奇怪的部分: 如果我们在控制台应用程序中复制相同的代码,控制台应用程序就会工作,立即获取令牌 如果我们使用fiddler启动一个超过我们公司默认代理的代理,webapi应用程序就会工作 我们使用的测试代码完全来自文档 我们使用的示例代码:Azure 在公司代理网络内的WebAPI中运行时ADAL[AquireTokenAsync]超时,azure,asp.net-web-api,azure-active-directory,Azure,Asp.net Web Api,Azure Active Directory,我们在asp.net web api应用程序中遇到了Azure广告库的一个非常奇怪的问题。当我们尝试使用带有证书的AcquireTokenAsync获取令牌时,没有响应,然后超时 奇怪的部分: 如果我们在控制台应用程序中复制相同的代码,控制台应用程序就会工作,立即获取令牌 如果我们使用fiddler启动一个超过我们公司默认代理的代理,webapi应用程序就会工作 我们使用的测试代码完全来自文档 我们使用的示例代码: public async Task < string > GetTo
public async Task < string > GetTokenAsync() {
var context = new AuthenticationContext(authority);
var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
var results = store.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, false);
var cert = new ClientAssertionCertificate(clientid, results[0]);
var token = await context.AcquireTokenAsync(resource, cert).AccessToken;
return token;
}
公共异步任务GetTokenAsync(){
var context=新的AuthenticationContext(authority);
var store=new X509Store(StoreName.My,StoreLocation.LocalMachine);
打开(OpenFlags.ReadOnly);
var results=store.Certificates.Find(X509FindType.FindByThumbprint,指纹,false);
var cert=新客户证书(客户ID,结果[0]);
var token=await context.AcquireTokenAsync(资源,证书).AccessToken;
返回令牌;
}
基本上,代码应该正常工作,因为它直接来自文档。这与网络有关吗
简而言之,我们得到的错误是:
位于System.Web.Http.Results.ExceptionResult..ctor(异常异常,IDependencyProvider依赖项)
位于System.Web.Http.ApicController.InternalServerError(异常)
在C:\Users\QiaoH\source\repos\WebApplication1\WebApplication1\Controllers\TokenController.cs中的WebApplication1.Controllers.TokenController.d\uu 0.MoveNext()处:第55行--从引发异常的上一个位置开始的堆栈结束跟踪
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在System.Threading.Tasks.TaskHelperExtensions.d_u1`1.MoveNext()中
来自引发异常的上一个位置的堆栈结束跟踪
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
位于System.Web.Http.Controllers.ApiControllerActionInvoker.d_u1.MoveNext()---引发异常的上一个位置的堆栈结束跟踪
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在System.Web.Http.Controllers.ActionFilterResult.d_u5.MoveNext()中
来自引发异常的上一个位置的堆栈结束跟踪
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在System.Web.Http.Dispatcher.HttpControllerDispatcher.d_u15.MoveNext()中
解决的问题:
由于代理,我们必须使用默认凭据启用默认代理
我们将下面的内容放在web.config中,它可以正常工作
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true">
</defaultProxy>
</system.net>
问题已解决:
由于代理,我们必须使用默认凭据启用默认代理
我们将下面的内容放在web.config中,它可以正常工作
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true">
</defaultProxy>
</system.net>