OAuth2 Token Requester

Du kennst das. Du möchtest eine API testen, die OAuth anbietet, benötigst aber OAuth-Tokens, mit denen du arbeiten kannst - z.B. für Tests. Diese kannst du nun durch Ändern der Tests u.Ä. so zwischenschieben, dass die Tokens erzeugt werden, musst sie aber dennoch abgreifen. Auf riesige Anwendungen, die auf Electron aufbauen1, willst du grundlegend verzichten.

Dafür habe ich jetzt eine einfache, Cross-Plattform-Möglichkeit auf Basis des .NET Framework Core geschrieben, die momentan für Win10-x86, Win10-x64, osx-10.10, osx-10.11 und osx-10.12 unabhängig erstellt wird - letztere (osx) sind nicht getestet.

Du kannst dir hier2 das Repository dazu anschauen. Das Projekt ist so aufgebaut, dass eine native Anwendung kompiliert wird, die nicht auf eine installierte .NET Core-Version abhängig ist.

Einige Referenzen zur Verwendung:

PS> .\OAuth2TokenRequester.exe oauth

Usage:  oauth [options] [command]

Options:
  -c|--config     Configuration File
  --host          Host
  -id|--clientid  Client ID
  -r|--redirect   Redirect URI
  -s|--scope      Scopes
  -?|-h|--help    Show help information

Commands:
  auth
  token

Use "oauth [command] --help" for more information about a command.

Mögliche Aktionen:

  • oauth auth
  • oauth token

Auth

PS> .\OAuth2TokenRequester.exe oauth auth -?

Usage:  oauth auth [options]

Options:
  -a|--auth     Auth Part for URI
  -?|-h|--help  Show help information

Auth erlaubt es anhand eines Profils eine Request URI aufzubauen, die im Anschluss einen Authorization Code erzeugt, der dann in einem weiteren Schritt durch ein Access Token und Refresh Token. Diese Request URI muss händisch im Browser ausgeführt werden - .NET Core erlaubt kein Starten eines Prozesses via https://.

Es wird eine Datei response.json erstellt, in der der verwendete State sowie der Code eingetragen werden müssen. Beispiel:

{
    "state": "-1",
    "code": ""
}

Token

PS> .\OAuth2TokenRequester.exe oauth token -?

Usage:  oauth token [options]

Options:
  --token                 Token Part for URI
  -secret|--clientsecret  Client Secret
  --state                 State Value
  --code                  Response code
  -?|-h|--help            Show help information

Anhand der zuvor erstellten response.json kann nun ein Token-Set, bestehend aus access_token und refresh_token, erzeugt werden. Hierzu wird zum oauth-Command eine weitere Konfiguration angehangen.

.\OAuth2TokenRequester.exe oauth -c configfile.json -c response.json token

Profil-Datei

{
    "host": "scheme://host.tld/common-path",
    "authPart": "/auth",
    "tokenPart": "/token"
    "clientId": "sample",
    "clientSecret": "sample",
    "redirectUri": "scheme://redirect.uri.tld/oauth/callback",
    "scopes": [
        "translated",
        "into",
        "space",
        "separated",
        "query",
        "parameter"
    ]
}