Ik ben al sinds vorig week (9 dagen geleden!) bezig om de oAuth2 verificatie van deze API op gang te krijgen. Het is mij 8 dagen geleden 1x gelukt om het werkend te krijgen, waardoor een refreshtoken kreeg en daarmee kan (blijven) werken. Maar de oAuth2 verificatie lukt niet.
In het kort, wat ik doe (zonder code). Ik bouw een URL op aan de hand van de gevraagd info (client_id, redirect_uri, etc) naar de gespecificeerde URL van mijn interne WebAPI website. Ik meld me aan, ik krijg keurig een URL terug in mijn eigen asp.net site met daarin de QueryString code=.
Deze code lees ik uit en stuur ik naar de functie om mijn access_token op te vragen. Je moet hier een string in de body meesturen als plaintext. Ik maak dus eerst een string op en voeg die vervolgens toe aan de body. Deze verstuur ik met een request naar de URL en vervolgens krijg ik constant terug "invalid_request".
Het gekke is, met het refreshen van een token doe ik precies hetzelfde, maar met een andere querystring. De methode (inclusief code) is 100% gelijk aan elkaar. Ik snap dus echt niet wat er fout gaat.
Heeft er iemand ervaring met deze API en kan mij vertellen wat ik mis doe of wat er aan de hand is?
Ik controleer overigens op elk moment in mijn C#-code of de code nog wel dezelfde waarde heeft. Dit heeft hij, zelfs als ik een response krijg, staat hij nog goed in de headers verwerkt. Daarom snap ik er niets van.
De client_id en alle overige variabelen komen uit de web.config. Dit is ook getest en worden keurig meegenomen in de request.
Weet niet of het mag *snip* Nee, werving is niet de bedoeling hier
Zie daarvoor Devschuurder werven? Gebruik Vraag & Aanbod!
PS: Als ik deze oAuth2 procedure invoer in Postman, werkt het wel. Ook binnen PHP werkt het zonder problemen. Maar het moet in C# werken... En volgens mij kan ik niet zien hoe Postman de oAuth2 opstelt en wat het verschil met mijn headers/body is.
In het kort, wat ik doe (zonder code). Ik bouw een URL op aan de hand van de gevraagd info (client_id, redirect_uri, etc) naar de gespecificeerde URL van mijn interne WebAPI website. Ik meld me aan, ik krijg keurig een URL terug in mijn eigen asp.net site met daarin de QueryString code=.
Deze code lees ik uit en stuur ik naar de functie om mijn access_token op te vragen. Je moet hier een string in de body meesturen als plaintext. Ik maak dus eerst een string op en voeg die vervolgens toe aan de body. Deze verstuur ik met een request naar de URL en vervolgens krijg ik constant terug "invalid_request".
Het gekke is, met het refreshen van een token doe ik precies hetzelfde, maar met een andere querystring. De methode (inclusief code) is 100% gelijk aan elkaar. Ik snap dus echt niet wat er fout gaat.
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| public IRestResponse getAccessTokenJson(string codeFromURL) { ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;// | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; this.codeFromURL = codeFromURL; string postURL = endpointAPIUrl + "oauth/token"; StringBuilder body = new StringBuilder(); body.Append("code=" + this.codeFromURL); body.Append("&client_id=" + API_CLIENT_ID); body.Append("&client_secret=" + API_CLIENT_SECRET); body.Append("&redirect_uri=" + HttpUtility.UrlEncode(API_REDIRECT_URL).Replace("+", "%20")); body.Append("&grant_type=authorization_code"); string body2 = "code=" + codeFromURL + "?client_id=" + API_CLIENT_ID + "?client_secret=" + API_CLIENT_SECRET + "?redirect_uri=" + API_REDIRECT_URL + "?grant_type=authorization_code"; var client = new RestClient(postURL); var request = new RestRequest(); request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); request.RequestFormat = DataFormat.None; request.AddParameter("text/plain", body2, ParameterType.RequestBody); var response = client.Post(request); return response; } |
Heeft er iemand ervaring met deze API en kan mij vertellen wat ik mis doe of wat er aan de hand is?
Ik controleer overigens op elk moment in mijn C#-code of de code nog wel dezelfde waarde heeft. Dit heeft hij, zelfs als ik een response krijg, staat hij nog goed in de headers verwerkt. Daarom snap ik er niets van.
De client_id en alle overige variabelen komen uit de web.config. Dit is ook getest en worden keurig meegenomen in de request.
Weet niet of het mag *snip* Nee, werving is niet de bedoeling hier
PS: Als ik deze oAuth2 procedure invoer in Postman, werkt het wel. Ook binnen PHP werkt het zonder problemen. Maar het moet in C# werken... En volgens mij kan ik niet zien hoe Postman de oAuth2 opstelt en wat het verschil met mijn headers/body is.
[ Voor 3% gewijzigd door RobIII op 14-02-2022 21:56 ]