我在ASP.NET Core 2中创建了一个Web API,并使用Azure AD进行保护。请求在我的开发环境中正常工作。但是,当我将API发布到IIS并在请求中传入Authorization标头时,我收到了以下错误:
fail: Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler[3]
Exception occurred while processing message.
System.InvalidOperationException: IDX10803: Unable to obtain configuration from: 'https://login.microsoftonline.com/xxxx/.well-known/openid-configuration'. ---> System.IO.IOException: IDX10804: Unable to retrieve document from: 'https://login.microsoftonline.com/xxxx/.well-known/openid-configuration'. ---> System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.Http.WinHttpException: A connection with the server could not be established
我做错了什么?我可以在浏览器中成功浏览网址。
答案 0 :(得分:0)
我明白了。这是因为代理设置访问互联网。由于ASP.NET Core没有从web.config的system.net区域获取代理设置,因此理想的解决方案是创建一个中间件来充当代理。 击>
我的时间不够用。因此,我创建了一个新用户并使用该新用户登录服务器,并在Internet Explorer选项中配置了代理设置。然后我在IIS中配置了App Pool,以便在该用户的身份下运行。问题解决了!
正确的答案是为ADAL使用BackchannelHttpHandler
进行的元数据请求添加代理。你可以这样做:
public void Configure(string name, JwtBearerOptions options)
{
options.BackchannelHttpHandler = new HttpClientHandler
{
UseProxy = true,
Proxy = new WebProxy
{
Address = new Uri($"{appSettings.InternetProxyUrl}:{appSettings.InternetProxyPort}"),
UseDefaultCredentials = true
}
};
}