2017-02-01 1 views
1

Ich habe einen mobilen Client (App), der den Benutzer mit Google authentifizieren lässt. So erhält der Kunde ein Zugangstoken und einige Informationen (Name, E-Mail usw.) von Google. Funktioniert gut!Validieren eines Zugriffstokens in meiner ASP.NET-Web-API

Ich erstellte auch eine ASP.NET-Web-API, mit der die mobile App kommunizieren sollte. Auf der Client-Seite füge ich das Token dem HttpClient hinzu mit: client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue ("Bearer", "pretty_long_access_token_separated_by_two_dots");

Frage 1: Ich versuche, die Zugriffstoken auf dieser Seite zu „entschlüsseln“ (um sicherzustellen, dass es in Ordnung ist): https://jwt.io/ Der Header und die Nutzlast ist alles in Ordnung, aber es scheint, als ob es sich um eine „ungültig ist Unterschrift "(sagt in der Unterseite). Sollte ich mir darüber Gedanken machen?


Auf der Serverseite, habe ich dies in der Startup-Klasse auf die Konfigurationsmethode:

app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions 
{ 
    AuthenticationMode = AuthenticationMode.Active, 
    AllowedAudiences = new List<string> {"my_client_id"}, 
    IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[] 
    { 
     new SymmetricKeyIssuerSecurityTokenProvider(@"https://accounts.google.com/", "my_client_secret") 
    }, 
}); 

Das einzige, was ich mit dem Token tun will, auf meiner Server-Seite, macht Sicher, dass nur validierte Benutzer aus meiner App auf meinen API-Controller zugreifen dürfen.

Frage 2: Ist UseJwtBearerAuthentication das Richtige für mich, oder gehe ich in die falsche Richtung?

Mein Problem ist, bekomme ich 401, unbefugt, beim Versuch, auf meine WEB-API-Controller zuzugreifen.

Wenn ich auf dem richtigen Weg bin, kann ich versuchen, mehr über die Server-Seite Setup zu erklären ...

Alle helt sehr geschätzt werden würde!

+0

Nur um zu klären, geben Sie das JWT oder Google aus? – Ben

Antwort

0

Wenn Sie ein JWT Token verwenden, dann müssen Sie JWT statt Bearer

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("JWT", "pretty_long_access_token_separated_by_two_dots"); 

Die Signatur verwendet wird, um das Token als authentisch zu validieren und daher nur durch den Authentifizierungsserver erforderlich ist. Wenn Google Ihr Authentifizierungsserver ist, sollte ein API-Endpunkt vorhanden sein, den Sie von Ihrem Server aus aufrufen können, um zu überprüfen, ob das Token gültig ist.

Wenn der Server die JWT Token ausgibt, dann müssen Sie überprüfen, ob das Token durch Decodierung der Signatur mit dem geheimen gültig ist, der verwendet wurde es in erster Linie zu erstellen

Wenn Google wird die Ausstellung JWT und Sie möchten, dass Ihr Server es selbst validieren kann, dann müssen Sie einen anderen Verschlüsselungstyp wie RS256 verwenden, mit dem Sie die Signatur mit einem öffentlichen Schlüssel von Google validieren können (ich habe keine Ahnung, ob sie diese Methode bereitstellen) oder nicht)

Der Grund https://jwt.io/ kann Ihre Signatur nicht validieren, weil sie mit einem geheimen Code signiert wurde. Wenn Sie diesen geheimen Code haben, können Sie ihn in das Textfeld unten rechts einfügen. Wenn das Geheimnis korrekt ist und das Token nicht abgelaufen ist, wird es als gültiges JWT-Token angezeigt.

+0

Vielen Dank für Ihre Antwort! Ja, Google ist mein Authentifizierungsserver. Ich betreibe nicht meine eigenen. Also, auf meiner Server-Seite (in Startup> Konfiguration), sollte ich nicht app.UseJwtBearerAuthentication (...) verwenden? Oder? Wo auf der Serverseite sollte ich den Validierungsaufruf an eine Google-API vornehmen? Mit freundlichen Grüßen Andreas – Brosten

+0

Verwenden einer benutzerdefinierten Autorisierung und Authentifizierung Attribut? – Brosten

+1

@Brosten - Ich bin nicht vertraut mit der Google-Authentifizierung, die Sie verwenden, vielleicht können Sie mich mit einer API oder etwas verknüpfen? – Ben

Verwandte Themen