14

Così ho lavorato con DotNetOpenAuth per un po ', oggi ho bisogno di aggiungere il supporto per il provider che mi costringe a inviare la chiave segreta con l'autenticazione di base (ho usato un versione precedente e solo parametri Post)Impossibile ottenere le credenziali di rete per funzionare

Ho provato a utilizzare ClientCredentialApplicator.NetworkCredential, non ha funzionato. Quindi, secondo il consiglio here, ho creato il mio ClientCredentialApplicator.

Non ho ancora funzionato, ho inserito i breakpoint in ApplyClientCredential e non hanno mai colpito.

Ho eseguito l'aggiornamento alla versione più recente (4.3.0.0), che dovrebbe avere this fix.

Tutto funziona ma non c'è Authorization intestazione, e le risposte di server remoti con 301 errore (che mi fa pensare è lo stesso problema come il commit - informazioni di autorizzazione non viene aggiunto alla richiesta fino a quando il server risponde con Unauthorized e il provider sto usando le risposte con 301 quando non c'è l'intestazione Authorization)

+0

Dove sono tutte le risposte? – Madd0g

+1

Hai errori? Avete qualche accesso all'applicazione che stampa i codici di ritorno? –

+0

Vedo il provider che restituisce l'errore in Fiddler, so che il provider richiede l'intestazione dell'autorizzazione e che non è stata inviata. Nessun errore non gestito dalla libreria – Madd0g

risposta

0

È possibile aggiungere manualmente un'intestazione di autenticazione di base al proprio HttpWebRequest accedendo alla richiesta. Raccolta di intestazioni.

è possibile aggiungere l'intestazione seguendo le indicazioni sulla Wikipedia:

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

ecco il codice. Funziona con me, quando si utilizza Web-client e FtpWebRequests, e.t.c

using System.Net; 

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

Speranza che aiuta :)

0

ho avuto un requisito analogo: un fornitore OAuth2 che richiede HTTP Basic Authentication. Questa soluzione ha funzionato per me:

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

C'è un problema quando si utilizza il DotNetOpenAuth.OAuth2.ClientCredentialApplicator.NetworkCredentialApplicator costruttore che prende un'istanza di System.Net.NetworkCredential. Il metodo ApplyClientCredential utilizza l'istanza ClientSecret non la proprietà Password dalle credenziali (vedere di seguito).

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

So che questa domanda è vecchia, sperando che questo aiuti qualcun altro a cercare una soluzione.