Ответ 1
Вот код. Он работает со мной при использовании WebClients и FtpWebRequests, e.t.c
using System.Net;
NetworkCredential credentials = new NetworkCredential("user","pass");
request.Credentials = credentials;
Надеюсь, это поможет:)
Итак, я некоторое время работал с DotNetOpenAuth, Сегодня мне нужно было добавить поддержку провайдера, которая заставляет меня отправлять секретный ключ с обычной проверкой подлинности (я использовал старую версию и только параметры Post)
Я пробовал использовать ClientCredentialApplicator.NetworkCredential
, это не сработало. Затем в совете здесь я сделал свой собственный ClientCredentialApplicator
.
Я все еще не работал, я поставил точки останова в ApplyClientCredential
, и они никогда не попадали.
Я обновил до последней версии (4.3.0.0), которая должна иметь это исправление.
Все работает, но нет заголовка Authorization
, а удаленный сервер отвечает с ошибкой 301 (что заставляет меня думать, что это та же проблема, что и коммит - информация авторизации не добавляется в запрос до тех пор, пока сервер не ответит с Unauthorized
и провайдер я использую ответы с 301, когда нет заголовка Authorization
)
Вот код. Он работает со мной при использовании WebClients и FtpWebRequests, e.t.c
using System.Net;
NetworkCredential credentials = new NetworkCredential("user","pass");
request.Credentials = credentials;
Надеюсь, это поможет:)
Вы можете вручную добавить основной заголовок аутентификации в свой HttpWebRequest, обратившись к коллекции request.Headers.
Вы можете добавить заголовок, следуя указаниям Wikipedia:
request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new UTF8Encoding(false).GetBytes("username:password")));
У меня было аналогичное требование: поставщик OAuth2, который требует HTTP Basic Authentication. Это решение работало для меня:
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);
}
Я знаю, что этот вопрос старый, надеясь, что это поможет кому-то еще найти решение.