需要代理身份验证(Forefront TMG需要授权才能完成请求。拒绝访问Web代理筛选器。)

时间:2012-01-24 08:54:45

标签: c# .net twitter exception-handling twitter-oauth

当我试图向Twitter发帖时,上述错误即将来临。如何摆脱这个错误?

stacktrace如下:

  

Exception = {“远程服务器返回错误:(407)需要代理身份验证。”} ExceptionStatus = ProtocolError

代码:

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;
}

1 个答案:

答案 0 :(得分:7)

如果流畅的Twitter正在使用WebRequests,那么您需要使用以下代码指定代理的凭据:

 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;

缺点是,您必须将这些凭据存储在某个位置,并且如果攻击者设法破坏了您的应用程序,则攻击者可以捕获这些凭据。在某些环境中,从安全角度来看,这是不可接受的。