我有一个ASPNET Core 2应用程序,我试图使用OpenId使用Azure AD进行身份验证。我只是在ASPNET Core 2模板中选择单一组织身份验证的样板代码,因此没有自定义代码。我按照文章here.
由于代理,应用程序无法从Azure AD应用程序获取元数据。如果我只是将其粘贴到浏览器中,则相同的URL会返回数据。
我得到的错误是:
HttpRequestException:响应状态代码不表示成功: 407(需要代理身份验证)。
System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode() IOException:IDX10804:无法从以下文件中检索文档:' https://login.microsoftonline.com/my-tenant-id/.well-known/openid-configuration'。
Microsoft.IdentityModel.Protocols.HttpDocumentRetriever + d__8.MoveNext()
我有另一个ASPNET 4.5.2应用程序,在以下代码中设置代理后,我可以使用与上面相同的Azure AD应用程序执行身份验证:
System.Net.HttpWebRequest.DefaultWebProxy = new WebProxy
{
Address = new Uri("http://my-company-proxy:8080"),
Credentials = new NetworkCredential
{
UserName = "proxyusername",
Password = "proxypassword"
}
};
所以基本上我的问题是通过ASPNET Core 2中的代理身份验证。
我已经尝试过Microsoft.AspNetCore.Proxy包。它几乎破碎,对我不起作用。此外,我尝试在machine.config中添加代理条目(这实际上不是4.5.2应用程序所必需的),但这也不起作用。我相信过去的公司代理应该是非常微不足道的,但到目前为止看起来并不像。
请帮忙。
答案 0 :(得分:7)
Tratcher的评论指出了我正确的方向,我得到了它的工作,但只是为了帮助每个人,下面是你需要做的:
builder.AddOpenIdConnect(options => options.BackchannelHttpHandler = new HttpClientHandler
{
UseProxy = true,
Proxy = new WebProxy
{
Credentials = new NetworkCredential
{
UserName = "myusername",
Password = "mypassword"
},
Address = new Uri("http://url:port")
}
});
答案 1 :(得分:0)
在Full .net框架中,设置代理正在使用配置设置 但是要在.net核心中使用HTTP代理,你必须实现 IWebProxy接口。
Microsoft.AspNetCore.Proxy是代理中间件,它用于不同的目的(设置反向代理)而不是http代理。请参阅此article以获取更多详细信息
在.net核心中实现webproxy,
public class MyHttpProxy : IWebProxy
{
public MyHttpProxy()
{
//here you can load it from your custom config settings
this.ProxyUri = new Uri(proxyUri);
}
public Uri ProxyUri { get; set; }
public ICredentials Credentials { get; set; }
public Uri GetProxy(Uri destination)
{
return this.ProxyUri;
}
public bool IsBypassed(Uri host)
{
//you can proxy all requests or implement bypass urls based on config settings
return false;
}
}
var config = new HttpClientHandler
{
UseProxy = true,
Proxy = new MyHttpProxy()
};
//then you can simply pass the config to HttpClient
var http = new HttpClient(config)
结帐https://msdn.microsoft.com/en-us/library/system.net.iwebproxy(v=vs.100).aspx