2016-07-21 20 views
4

Ich habe eineWie kann ich ein OAuth 2.0-Authentifizierungstoken in C# erhalten

bekam

Ich muss dann einen Anruf erhalten einen Träger Token im Header verwendet wird.

Ich kann dies in Postman arbeiten, aber haben eine Wand versucht zu erarbeiten, wie man es in C# implementieren. Ich benutze RestSharp (aber offen für andere). Alles scheint so undurchsichtig, als ich dachte, es wäre ziemlich einfach:/Es ist eine Konsolen-App, also brauche ich kein Schnickschnack.

Letztendlich möchte ich, dass meine App (programmatisch) ein Token erhält, und dann für meine nachfolgenden Anrufe verwenden. Ich würde es begrüßen, wenn mich jemand auf Dokumentationen oder Beispiele verweist, die erklären, was ich klar hinter mir habe. Alles, was mir begegnet ist, ist teilweise oder für Dienste, die in einem anderen Fluss arbeiten.

Danke.

Antwort

10

In Postman, klicken Sie Code generieren und dann in generieren Code Snippets Dialog Sie eine andere Codierung Sprache auswählen können, einschließlich C# (RestSharp).

Außerdem sollten Sie nur die Zugriffstoken-URL benötigen. Die Formparameter sind dann:

grant_type=client_credentials 
client_id=abc  
client_secret=123 

Code Snippet:

var client = new RestClient("https://service.endpoint.com/api/oauth2/token"); 
var request = new RestRequest(Method.POST); 
request.AddHeader("cache-control", "no-cache"); 
request.AddHeader("content-type", "application/x-www-form-urlencoded"); 
request.AddParameter("application/x-www-form-urlencoded", "grant_type=client_credentials&client_id=abc&client_secret=123", ParameterType.RequestBody); 
IRestResponse response = client.Execute(request); 

Aus dem Antworttext Sie dann Ihre Zugriffstoken erhalten. Zum Beispiel für einen Bearer Token-Typ können Sie dann den folgenden Header auf nachfolgende authentifizierte Anforderungen hinzufügen:

request.AddHeader("authorization", "Bearer <access_token>"); 
+0

Brilliant, funktionierte perfekt - ich noobness Schuld werde für nicht zu merken, dass ich Code Sprache generieren ändern könnte. Ich entdeckte auch (nachdem ich das gepostet habe), dass ich das Sicherheitsprotokoll 'ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 ändern musste;' wird auch benötigt (zumindest in meinem Fall), andere weise Statuscodes '0' werden angetroffen. – DougF