所以我一直在使用DotNetOpenAuth一段时间,今天我需要添加对提供程序的支持,迫使我使用基本身份验证发送密钥(我一直在使用旧版本,只有Post参数)
我尝试过使用ClientCredentialApplicator.NetworkCredential
,但它没有用。然后根据建议here,我已经创建了自己的ClientCredentialApplicator
。
我仍然没有工作,我在ApplyClientCredential
中设置了断点,但它们从未命中过。
我已升级到最新版本(4.3.0.0),该版本应为this fix。
一切正常但没有Authorization
标题,远程服务器回答301错误(这让我认为它与提交问题相同 - 在服务器回答之前,授权信息未添加到请求中使用Unauthorized
和提供程序时,如果没有Authorization
标题,我将使用301的答案
答案 0 :(得分:1)
这是代码。当使用WebClients和FtpWebRequests时,它适用于我,e.t.c
using System.Net;
NetworkCredential credentials = new NetworkCredential("user","pass");
request.Credentials = credentials;
希望有所帮助:)
答案 1 :(得分:0)
您可以通过访问request.Headers集合手动向HttpWebRequest添加基本身份验证标头。
您可以在Wikipedia上的指示后添加标题:
request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new UTF8Encoding(false).GetBytes("username:password")));
答案 2 :(得分: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);
}
我知道这个问题已经过时了,希望这有助于其他人寻找解决方案。