需要代理身份验证(Forefront TMG需要授权才能完成请求.拒绝访问Web代理筛选器.)
本文关键字:代理 拒绝访问 请求 Web 筛选 身份验证 Forefront TMG 授权 | 更新日期: 2023-09-27 18:21:09
当我试图在Twitter上发布消息时,出现了上述错误。如何消除那个错误?
堆栈跟踪如下:
异常={"远程服务器返回错误:(407)需要代理身份验证。"}异常状态=协议错误
代码:
private string GetOAuthUrl()
{
IFluentTwitter twitter;
//Override the callback url if one was entered
if (CallbackUrl != null && CallbackUrl.Trim().Length > 0)
{
twitter = FluentTwitter.CreateRequest().Configuration.UseHttps().Authentication.GetRequestToken(ConsumerKey, ConsumerSecret, CallbackUrl);
}
else
{
twitter = FluentTwitter.CreateRequest().Configuration.UseHttps().Authentication.GetRequestToken(ConsumerKey, ConsumerSecret);
}
var response = twitter.Request();
UnauthorizedToken UnauthorizedToken = response.AsToken();
string AuthorizationUrl = FluentTwitter.CreateRequest().Authentication.GetAuthorizationUrl(UnauthorizedToken.Token);
return AuthorizationUrl;
}
如果fluent twitter在幕后使用WebRequest,那么您需要使用以下代码为代理指定凭据:
System.Net.WebRequest.DefaultWebProxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
这将告诉所有web请求使用运行应用程序的用户的凭据向代理进行身份验证。
要实现这一点,您需要将应用程序配置为在已被授予访问代理服务器权限的服务帐户下运行。然后,您可以限制此服务帐户,使其具有尽可能少的权限来运行服务。
如果您的应用程序需要在没有使用代理服务器权限的帐户下运行,您可以明确指定凭据,如下所示:
System.Net.NetworkCredential credentials = new System.Net.NetworkCredential("username", "password", "domain");
System.Net.WebRequest.DefaultProxy.Credentials = credentials;
不利的一面是,你必须将这些凭据存储在某个地方,如果攻击者设法破坏你的应用程序,他们可能会被攻击者捕获。在某些环境中,从安全角度来看,这是不可接受的。