Jump to content
Unity Insider Forum

Google-Login mit C#


Shalafi

Recommended Posts

Hi,

ich möchte in meinem C# Programm bzw. in meinem Unity-Spiel (für Windows) den Login per Google-Account anbieten.

Ich möchte dem Spieler ermöglichen, sich bei meinem Spiel nicht registieren zu müssen, sondern sich per Google-Account einloggen zu können.
Alternativ soll die normale Registierung aber auch möglich sein.

Es geht mir dabei nicht um iOS / Android, sondern um ein Windows-Spiel.
 

 

 

Wäre Folgendes möglich:

Der Client holt sich per OAuth von Google den Authorization-Code und schickt diesen an den Server weiter.
Der Server prüft dann den Code und holt sich ggf. die Google-UserId bzw. die E-Mail Adresse.
Anhand derer wird der User identifiziert und ggf. eingeloggt.


Ist diese Vorgehensweise möglich, oder gibt es da Sicherheitsbedenken (z.B. wenn man den Authorization-Code an den Server sendet)




Gruß
 
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

ist es überhaupt möglich, dass der Client den Auth-Code anfordert, und der (Web-)Server sich damit authentifiziert?

Bei meinem Skript liefert

$gClient->fetchAccessTokenWithAuthCode($_POST['gcode']);
$gtoken = $gClient->getAccessToken();

bzw.

$gClient->authenticate($_POST['gcode']);
$gtoken = $gClient->getAccessToken();

 

ein leeres Ergebnis.



Gruß

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich glaube bei Google's Authentifizierung braucht man keine Angst habe, denn die wollen ja auch sogar callback url haben. Sowohl alles client seitig, aber auch client und server seitige Variante gibt es. Ich hab sowas bei meiner Seite auch vor ein, zwei Monate implementiert, aber musste schon einiges probieren, weil es nicht genau erklärt wird. Vor allem hab ich nicht verstanden, wann man ausgeloggt wird und wie man das checkt.

Ich schätze mal du meinst WebGL Version und nicht Windows oder warum zeigst du da PHP-Code statt C# oder ähnliches?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

da hast du mich etwas falsch verstanden. Der Client läuft unter Unity (Windows + C#). Dieser holt den Auth-Code von Google (das funktioniert schon)
Diesen Code schickt er dann an einen Web-Server, der sich dann Informationen von der Google-API holen soll.

Deshalb hab ich PHP-Code vom Server-Skript gepostet, der aus irgend einem Grund nicht funktioniert. Ich weis leider auch nicht, wo ich da eine mögliche Fehlermeldung abfangen könnte.
$gtoken ist halt einfach null

 

Gruß

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

ich hab jetzt rausbekommen, dass das

$gClient->authenticate($_POST['gcode']);

folgenden Fehler liefert:

array(2) {
  ["error"]=>
  string(13) "invalid_grant"
  ["error_description"]=>
  string(22) "Missing code verifier."
}

 

Weis jemand, was damit gemeint ist?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

ich hab es jetzt auf folgende Weise hinbekommen:

Der Client authentifiziert sich bei Google und ermittelt gleich das Access-Token mit dazu.
Das Access-Token wird dann an den (Web-)Server geschickt, der dann damit die User-ID und E-Mail Adresse ermittelt.

Das funktioniert soweit.


Bleibt dir Frage nach der Sicherheit. Ist es OK, das Access-Token durchs Netz zu schicken?
So wie ich das verstanden habe, ist das Token ja eh nur für mein Projekt bei Google (ClientId und ClientSecret) gültig.



Gruß

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin,

davon ausgehend, dass du den ID Token meinst, den du nach einem Google Sign-In wieder bekommst, ist es vollkommen legitim den an deinen Server zu schicken.
Allerdings sollte es eine HTTPS Verbindung sein. Es ist aber auch nicht verkehrt in deinem Backend deine App ClientId mit Audience aus dem Token zu vergleichen.
Einfach um zu prüfen, ob der Token tatsächlich für deine Anwendung generiert wurde und nicht irgendwer versucht dir falsche Tokens an dein Backend zu schicken.

Selbst wenn jemand an den JWT ran kommt, stehen da in der Regel keine wirklich geheimen Daten drin. Schlimmer wäre es, wenn man sich mittels des Token Zugang zu z.B. Admin Bereichen machen kann. Aber um das zu verhindern sind JWT's in der Regel short lived (Ich glaube der ID Token hält 10h, was verhältnismäßig lang ist).
Aber ich denke, dass sowas nicht auf deine Anwendung zutrifft.

Liebe Grüße

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...