Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: zemla 22. 08. 2018, 18:05:25

Název: OAuth2 HttpClient - NetworkCredential vs CredentialCache.DefaultCredentials
Přispěvatel: zemla 22. 08. 2018, 18:05:25
Dobrý den,

řeším problém, který se mi zdál jednoduchý, ale už si nevím rady. Různá diskuzní fóra si protiřečí a zaměňují se na nich i pojmy.

Co bych potřeboval: Pomocí .NET třídy HttpClient a její metody GetAsync(...) si potřebuju získat Bearer token z URL (autorita), abych měl autorizovaná volání Web API. Používám OAuth2 Implicit flow.

Co funguje:

Kód: [Vybrat]
var handler = new HttpClientHandler { Credentials = CredentialCache.DefaultCredentials };
using (var client = new HttpClient(handler) {Timeout = TimeSpan.FromMinutes(10)})
{
   ...
   ...
   var response = await client.GetAsync(...);
   ...

Ve hře je ještě redirectUri, kde ten token úspěšně vyčtu. 200 OK.

Problém mám s tím, že nechci použít CredentialCache.DefaultCredentials, protože kód má být v knihovně a ten kdo jí používá si sám má říct username a password v rámci naší firemní domény. K tomu slouží NetworkCredential třída. Můžu jí použít následovně - použiju stejného uživatele.

Kód: [Vybrat]
var credentials = new NetworkCredential("*user*", "*pwd*", "*domain*");
var handler = new HttpClientHandler { Credentials = credentials };

Všechno ostatní zůstává. Toto už ovšem vyhodí 401 Unauthorized. Důležitou informací může být, že součástí headeru odpovědi je "WWW-Authenticate: Negotiation" a "NTLM".

Něco nevím, nebo jsem to nebyl schopen vygooglovat.

Poradí mi někdo ?