2017-03-27 5 views
0

Ich habe ein MVC/API-Projekt erstellt, um die externe Authentifizierung zu aktivieren und funktionierte für meine lokale Host-URL. Allerdings muss ich das Folgende erreichen.Dynamic Redirect URL von Google Console - oAuth

  1. Ich unterstütze Multi Tenancy (gleichen App-Service und verschiedene DB), so dass jeder Mieter unterschiedliche DB zu verbinden hat basierend auf dem benutzerdefinierte param in der MVC-URL Ex: https://localhost/tenant1, .../tenant2. ../tenant3 usw. (wird an dieser Stelle nicht mit separater Subdomain behandelt)

  2. Ich bin mir nicht sicher, ob Google Console die URL für Platzhalter als Rückgabewert unterstützt und nicht sicher ist, wie dies im MVC-Code erreicht werden kann (Beispiel: http://localhost/) * ODER {0} .. etwas in der Art. (So dynamische Eingabeparameter wird von Google zurückgegeben werden)

Ich lese und versuche einige Lösungen. Ich werde die Antwort hier aktualisieren, sobald ich die komplette Lösung bekommen habe. In der Zwischenzeit, wenn jemand irgendwelche Vorschläge hat, bitte hilf mir.

UPDATE 1:

ich meinen Quellcode aktualisiert haben sich wie folgt:

Session-Objekt erstellen, bevor

System.Web.HttpContext.Current.Session["Tenant"] = "tenantname"; 

an das externe Login Umleitung Nach Rückruf der Mieter Details lesen und speichern in der Sitzung für nachfolgende DB-Aufrufe basierend auf dem Namen des Mieters

public async Task<ActionResult> ExternalLoginCallback(string returnUrl) 
    { 
     var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(); 
     if (loginInfo == null) 
     { 
      return RedirectToAction("Login"); 
     } 

     if (System.Web.HttpContext.Current.Session["Tenant"] != null) 
     { 
      string sessionObj = System.Web.HttpContext.Current.Session["Tenant"] as String; 
     } 

Antwort

1

Autorisierte Weiterleitungs-URIs Zur Verwendung mit Anfragen von einem Webserver. Dieser ist der Pfad in Ihrer Anwendung, an den Benutzer weitergeleitet werden, nachdem sie sich bei Google authentifiziert haben. Der Pfad wird mit dem Autorisierungscode für den Zugriff hinzugefügt. Muss ein Protokoll haben. Kann nicht URL-Fragmente oder relative Pfade enthalten. Kann keine öffentliche IP-Adresse Adresse sein.

Sie können so viele von ihnen, wie Sie wollen, aber die Wild Card wird nicht funktionieren.

+0

Vielen Dank für Ihre Antwort. – DevExpress

1

Dies ist eine allgemeine Anforderung und ist leicht zu lösen. Es gibt zwei Komponenten.

Erstens, unabhängig davon, unter welchen Ihrer vielen URLs Ihre Anwendung lebt (myapp.com/tenant1,/tenant2, etc), haben Sie eine einzelne Weiterleitungs-URL (zB myapp.com/oauthredirect).

Zweitens, wenn der OAuth Tanz (https://developers.google.com/identity/protocols/OAuth2WebServer#redirecting) starten, können Sie einen state Parameter angeben, die in Ihre oauthredirect Routine übergeben werden (z. B. als state=tenant1). Anschließend können Sie eine Weiterleitung zu der entsprechenden Website-URL erstellen, nachdem Sie Ihre Benutzerregistrierungsaufgaben abgeschlossen haben.

Seien Sie vorsichtig, wenn Sie Ihre Weiterleitungs-URLs in der Entwicklerkonsole angeben. Sie müssen Zeichen für Zeichen mit der tatsächlichen URL übereinstimmen. Also, zum Beispiel, müssen Sie sowohl http://myapp.com/oauthredirect als auch https://myapp.com/oauthredirect angeben. Ich fand es immer sehr nützlich, einen lokalen Eintrag in /etc/hosts (oder die Windows-Entsprechung) zu erstellen, so dass Ihr localhost auch von z. http://test.myapp.com

+0

Hallo Pinoyyid, Danke für deine Antwort. Ich schätze es. Gemäß der aktuellen Implementierung wurde die Umleitung von der MVC-Anwendung (OWIN) übernommen. (Meine ist keine SPA-Anwendung). Kannst du mir bitte statt State Param raten, kann ich ein Session-Objekt haben. Ich habe meine Frage mit dem Beispielcode aktualisiert. Bitte schau es dir an. – DevExpress

+0

Sie können im Prinzip, aber ich würde immer noch raten, den State-Parameter als das ist, was es ist. Die Verwendung eines Sitzungsobjekts funktioniert, sofern Ihre Serverinfrastruktur dies unterstützt, z. Wenn Sie in einem Cluster arbeiten, können Sie garantieren, dass die Sitzung über Knoten gespiegelt wird. – pinoyyid

+0

Danke. Aber in meinem Fall wäre mir der TenantName nur im Parameter URL route bekannt. Ex (Wenn die Anwendungs-URL von einer anderen Website gestartet wird. Oder geben Sie die URL direkt im Browser als https://mydomain1.net/tenant1 ein. Danach muss sich die App in den nachfolgenden Aufrufen an den Namen des Mandanten erinnern, um den Mandanten einzurichten Spezifische DB-Verbindung und Theme basierend auf dem URL-Param. Sie haben bereits für meine Frage geantwortet, aber ich gehe eine andere Ebene, um die Tenant-Informationen für die nachfolgenden Serveraufrufe beizubehalten.Die meisten Lösungen schlagen Session vor, aber wie Sie sagten, wird in load balanced env fehlschlagen . – DevExpress