Klar:
Als erstes braucht man einen 86 Zeichen langen String als code_verifier.
Und den dazugehörigen SHA256 Hash encoded als URL safe base64.
Der String ist random, bestehend aus Alphanumerischen Zeichen. Einfach irgendwas eingeben.
Habe das mit Ruby gemacht:
require 'digest'
require 'base64'
code_verifier = "igDTZvuwerig823t76iDtrdfwurwebpoqwehadvzXTazurbweu4238956webirbu23utktr343uiovYrcRQhdw"
code_challenge = Base64.urlsafe_encode64(Digest::SHA256.hexdigest(code_verifier))
puts "verifier: " + code_verifier
puts "challenge: " + code_challenge
Output ist dann:
verifier: igDTZvuwerig823t76iDtrdfwurwebpoqwehadvzXTazurbweu4238956webirbu23utktr343uiovYrcRQhdw
challenge: OGI1ZDJmMTE1YWM5Mjc0ZWZmZTRjNTE0MzAyZjE4NjAyMjA0Mzc0YTEyYjg2MWUzYmVjNjcwMTdjMjBkMjlmZQ==
Bin mir nicht sicher, ob das Padding hinten dran (==) weggelassen werden muss oder nicht. Ich habe es bei meinem Versuch weggelassen.
Wenn man das alles hat loggt man sich auf auth.tesla.com ein und übergibt dabei die eben generierte code_challenge und ersetzt state noch durch irgendwas (auch random, weiss nicht was die max length ist):
https://auth.tesla.com/oauth2/v3/authorize?code_challenge=OGI1ZDJmMTE1YWM5Mjc0ZWZmZTRjNTE0MzAyZjE4NjAyMjA0Mzc0YTEyYjg2MWUzYmVjNjcwMTdjMjBkMjlmZQ&client_id=ownerapi&state=351261&redirect_uri=https%3A%2F%2Fauth.tesla.com%2Fvoid%2Fcallback&response_type=code&code_challenge_method=S256&scope=openid+email+offline_access
Nach dem einloggen mit seinen Tesla credentials bekommt man eine Page Not Found Meldung und in der Adressleiste kopiert man den String nach „code=“ raus. Das ist euer authorization_code
Ab hier gilt es alles was rauskommt geheim zu halten.
Mit dem authorization_code und dem code_verifier kann man nun die Token generieren.
Habe das mit curl gemacht:
curl -H "Content-Type: application/json" -X POST -d '{"grant_type": "authorization_code", "client_id": "ownerapi", "code": "AUTHORIZATION_CODE", "code_verifier": "CODE_VERIFIER", "redirect_uri": "https://auth.tesla.com/void/callback"}' -s https://auth.tesla.com/oauth2/v3/token
Da natürlich AUTHORIZATION_CODE und CODE_VERIFIER dementsprechend ersetzen.
Dann bekommt man als Response die Token.
Ich hoffe das ist verständlich. Wenn nicht, dann nachfragen.
Fibs