Ich kann anscheinend keine Dokumentation dazu finden, wie die Anmeldung auf meine Webanwendung (die OAuth2.0- und Google-APIs verwendet) beschränkt werden kann, um nur Authentifizierungsanforderungen von Benutzern mit einer E-Mail an einen bestimmten Domainnamen oder eine Reihe von Domainnamen zu akzeptieren. Ich möchte eine Whitelist anstelle einer Blacklist erstellen.
Hat jemand Vorschläge dazu, eine Dokumentation der offiziell anerkannten Methode oder eine einfache, sichere Lösung?
Für die Aufzeichnung kenne ich keine Informationen über den Benutzer, bis er versucht, sich über die OAuth-Authentifizierung von Google anzumelden. Alles, was ich zurückerhalte, sind die grundlegenden Benutzerinformationen und E-Mails.
google-api
oauth-2.0
google-oauth
paradox870
quelle
quelle
Antworten:
Also habe ich eine Antwort für dich. In der oauth-Anfrage können Sie "hd = domain.com" hinzufügen, wodurch die Authentifizierung auf Benutzer dieser Domain beschränkt wird (ich weiß nicht, ob Sie mehrere Domains ausführen können). Den hier dokumentierten HD-Parameter finden Sie hier
Ich verwende die Google API-Bibliotheken von hier aus: http://code.google.com/p/google-api-php-client/wiki/OAuth2, daher musste ich die Datei /auth/apiOAuth2.php manuell bearbeiten ::
Bearbeiten: Ich arbeite noch an dieser App und habe diese gefunden, was möglicherweise die richtigere Antwort auf diese Frage ist. https://developers.google.com/google-apps/profiles/
quelle
hd
in dercreateAuthUrl
Funktion einen Parameter angeben, müssen Sie dennoch überprüfen, ob sich der Benutzer mit Ihrer Domain-E-Mail-Adresse anmeldet. Es ist sehr einfach, den Link-Parameter zu ändern, um alle E-Mail-Adressen zuzulassen und anschließend Zugriff auf Ihre Anwendung zu erhalten.hd
Siehe Parameter Verwendung developers.google.com/identity/work/it-apps Und die Referenz derhd
URI - Parameter gefunden wird developers.google.com/identity/protocols/... In Synopse, dashd
sollte param sein Wird als domänenbasierter Anzeigefilter für die Google Auth-Seite angesehen, sollte jedoch weiterhin auf Ihrer Seite überprüft werden.hd
kann ich im Parameter nur eine Domain einschränken. Was ist nun, wenn ich zwei oder drei Domains einschränken möchte?Kundenseite:
Mit der
auth2
Init-Funktion können Sie denhosted_domain
Parameter übergeben, um die im Anmelde-Popup aufgelisteten Konten auf diejenigen zu beschränken, die Ihren entsprechenhosted_domain
. Sie können dies in der Dokumentation hier sehen: https://developers.google.com/identity/sign-in/web/referenceServerseite:
Selbst bei einer eingeschränkten clientseitigen Liste müssen Sie überprüfen, ob die Liste
id_token
mit der von Ihnen angegebenen gehosteten Domain übereinstimmt. Bei einigen Implementierungen bedeutet dies, dass Sie dashd
Attribut überprüfen, das Sie von Google erhalten, nachdem Sie das Token überprüft haben.Beispiel für einen vollständigen Stapel:
Webcode:
Servercode (unter Verwendung der googles Node.js-Bibliothek):
Wenn Sie Node.js nicht verwenden, können Sie hier weitere Beispiele anzeigen: https://developers.google.com/identity/sign-in/web/backend-auth
quelle
Übergeben Sie bei der Definition Ihres Providers am Ende einen Hash mit dem Parameter 'hd'. Das können Sie hier nachlesen. https://developers.google.com/accounts/docs/OpenIDConnect#hd-param
Zum Beispiel für config / initializers / devise.rb
quelle
Folgendes habe ich mit dem Pass in node.js gemacht.
profile
ist der Benutzer, der versucht, sich anzumelden.Erstellen Sie dann einfach eine Logik, um nach mehreren Domänen anstatt nur nach einer zu suchen. Ich glaube, diese Methode ist sicher, weil 1. das @ -Symbol im ersten oder zweiten Teil einer E-Mail-Adresse kein gültiges Zeichen ist. Ich konnte die Funktion nicht austricksen, indem ich eine E-Mail-Adresse wie
mike@[email protected]
2 erstellte. In einem herkömmlichen Anmeldesystem konnte ich, aber diese E-Mail-Adresse konnte in Google niemals existieren. Wenn es sich nicht um ein gültiges Google-Konto handelt, können Sie sich nicht anmelden.quelle
Seit 2015 gibt es in der Bibliothek eine Funktion , mit der dies festgelegt werden kann, ohne dass die Quelle der Bibliothek wie in der Problemumgehung bearbeitet werden muss von aaron-bruce
Rufen
setHostedDomain
Sie vor dem Generieren der URL einfach Ihren Google Client anquelle