14

所以我一直在使用 DotNetOpenAuth 一段时间,今天我需要添加对提供程序的支持,迫使我使用基本身份验证发送密钥(我一直在使用旧版本并且只有 Post 参数)

我试过用ClientCredentialApplicator.NetworkCredential,没用。然后按照这里的建议,我自己做了ClientCredentialApplicator

我仍然没有工作,我在其中设置了断点,ApplyClientCredential但它们从未命中。

我升级到最新版本(4.3.0.0),应该有这个修复

一切正常,但没有Authorization标头,并且远程服务器以 301 错误回答(这让我认为这与提交的问题相同 - 授权信息不会添加到请求中,直到服务器回答Unauthorized和我正在使用的提供者没有Authorization标题时用 301 回答)

4

3 回答 3

1

这是代码。它适用于我,当使用 WebClients 和 FtpWebRequests 等时

using System.Net;

NetworkCredential credentials = new NetworkCredential("user","pass");
request.Credentials = credentials;

希望能帮助到你 :)

于 2013-10-13T07:40:18.187 回答
0

我有一个类似的要求:需要HTTP Basic Authentication的 OAuth2 提供程序。这个解决方案对我有用:

var authServer = new AuthorizationServerDescription { AuthorizationEndpoint = new Uri(AuthorizeUrl), TokenEndpoint = new Uri(AccessTokenUrl) };
var authClient = new WebServerClient(authServer, ConsumerKey, ConsumerSecret)
{
    ClientCredentialApplicator = ClientCredentialApplicator.NetworkCredential(ConsumerSecret)
};

使用DotNetOpenAuth.OAuth2.ClientCredentialApplicator.NetworkCredentialApplicator带有System.Net.NetworkCredential. 该ApplyClientCredential方法使用实例ClientSecret属性而不是Password凭据中的属性(见下文)。

public override void ApplyClientCredential(string clientIdentifier, HttpWebRequest request)
{
  if (clientIdentifier == null)
    return;
  if (this.credential != null)
    ErrorUtilities.VerifyHost((string.Equals(this.credential.UserName, clientIdentifier, StringComparison.Ordinal) ? 1 : 0) != 0, "Client identifiers \"{0}\" and \"{1}\" do not match.", (object) this.credential.UserName, (object) clientIdentifier);
  OAuthUtilities.ApplyHttpBasicAuth(request.Headers, clientIdentifier, this.clientSecret);
}

我知道这个问题很老,希望这可以帮助其他人寻找解决方案。

于 2015-05-14T17:43:19.330 回答
-1

您可以通过访问 request.Headers 集合手动将基本身份验证标头添加到您的 HttpWebRequest。

您可以按照Wikipedia上的指示添加标题:

request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new UTF8Encoding(false).GetBytes("username:password")));
于 2013-10-11T20:01:40.063 回答