Не удается заставить учетные данные сети работать - программирование
Подтвердить что ты не робот

Не удается заставить учетные данные сети работать

Итак, я некоторое время работал с DotNetOpenAuth, Сегодня мне нужно было добавить поддержку провайдера, которая заставляет меня отправлять секретный ключ с обычной проверкой подлинности (я использовал старую версию и только параметры Post)

Я пробовал использовать ClientCredentialApplicator.NetworkCredential, это не сработало. Затем в совете здесь я сделал свой собственный ClientCredentialApplicator.

Я все еще не работал, я поставил точки останова в ApplyClientCredential, и они никогда не попадали.

Я обновил до последней версии (4.3.0.0), которая должна иметь это исправление.

Все работает, но нет заголовка Authorization, а удаленный сервер отвечает с ошибкой 301 (что заставляет меня думать, что это та же проблема, что и коммит - информация авторизации не добавляется в запрос до тех пор, пока сервер не ответит с Unauthorized и провайдер я использую ответы с 301, когда нет заголовка Authorization)

4b9b3361

Ответ 1

Вот код. Он работает со мной при использовании WebClients и FtpWebRequests, e.t.c

using System.Net;

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

Надеюсь, это поможет:)

Ответ 2

Вы можете вручную добавить основной заголовок аутентификации в свой HttpWebRequest, обратившись к коллекции request.Headers.

Вы можете добавить заголовок, следуя указаниям Wikipedia:

request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new UTF8Encoding(false).GetBytes("username:password")));

Ответ 3

У меня было аналогичное требование: поставщик 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);
}

Я знаю, что этот вопрос старый, надеясь, что это поможет кому-то еще найти решение.