Verknüpfen Sie ein neues Google- oder Facebook-Login mit einem bestehenden Konto

8

Ich habe gerade Anweisungen in diesen Artikel , um Google als Login-Anbieter zu meiner MVC 5-App hinzuzufügen. Alles scheint gut zu funktionieren, aber wenn ich mich über Google anmelde, möchte ich, dass ich die von Google bereitgestellte E-Mail / den Benutzernamen als neues Konto in meiner App registriere. Wenn ich die E-Mail unverändert belasse und auf die Schaltfläche "Registrieren" klicke, wird mir mitgeteilt, dass die Adresse bereits vergeben ist, da ich mich zuvor im Anmeldedienst meiner App registriert habe.

Wie kann ich den Standardcode optimieren, der von der MVC-Projektvorlage generiert wird, damit ich den Google-Login mit einem vorhandenen lokalen Konto verknüpfen kann?

P.S. Ich habe genau das gleiche Problem mit Facebook.

    
ProfK 20.09.2015, 14:21
quelle

6 Antworten

4

Ich denke, dass Identitäten es so handhaben, wie es absichtlich geschieht, da es keine echte Möglichkeit gibt, die Identität des Benutzers per E-Mail zu überprüfen, die von Dritten stammt. Obwohl das Risiko relativ gering ist, ist es möglich, dass jemand ein Konto bei einer Drittpartei wie Facebook mit einer E-Mail-Adresse erstellt, die nicht zu ihnen gehört, und dann diese Drittanbieter-Anmeldung verwendet, um sich als Konto auf einer anderen Website auszugeben an die gleiche E-Mail angehängt.

Dadurch können Sie mit Identity nur ein neues Konto mit einem externen Login erstellen, wenn Sie sich anmelden, und nicht an ein vorhandenes Konto anfügen. Sobald der Benutzer jedoch mit anderen Mitteln authentifiziert wurde, werden Methoden bereitgestellt, um zusätzliche Anmeldungen zuzuordnen.

Wenn Sie nicht von dem relativ milden Sicherheitsrisiko betroffen sind, das nur davon ausgeht, dass wenn die E-Mail mit derselben Person übereinstimmt, müssen Sie nur ExternalLoginCallback in AccountController.cs ändern, um den Benutzer per E-Mail zu finden:

%Vor%

Und dann unterschreiben Sie sie:

%Vor%     
Chris Pratt 29.09.2015, 18:39
quelle
7

Ich verurteile die von @Chris Pratt aufgeworfenen Punkte völlig Ich bin mir jedoch nicht sicher, ob der verwendete Code ausreicht, um das zu tun, was das OP gefordert hat.

das Hinzufügen dieses Codes im Standardblock in ExternalLoginCallback sollte den Job ausführen

%Vor%     
Souhaieb Besbes 29.12.2015 16:35
quelle
2

Hier ist, wie ich dieses Problem, das Sie haben, lösen konnte. Mit dieser Lösung können Sie sich auf der Website mit Ihrer E-Mail-Adresse registrieren. Wenn Sie dann versuchen, sich mit derselben E-Mail-Adresse bei Google anzumelden, werden Sie nicht zur Registrierung aufgefordert, und Sie erhalten keine Fehler. Sie können sich anmelden, wenn die E-Mail-Adresse, mit der Sie sich lokal angemeldet haben, mit der E-Mail-Adresse Ihres Google-Kontos übereinstimmt. Ich habe den Default ExternalLoginCallBack-Code bearbeitet, den VS2015 mit einer if / else-Anweisung generiert hat, die nach einer vorhandenen E-Mail sucht, die mit der Login-E-Mail übereinstimmt. Ich hoffe, das hilft dir bei deiner Frage, denn ich hatte das gleiche Problem und konnte nirgendwo eine Antwort finden. Meine Anfragen nach mehreren Posts wurden ignoriert und glücklicherweise las ich eine der Antworten aus diesem Post, die mich zu meiner eigenen Lösung führten, die für mich auf VS2015 Core funktioniert.

%Vor%     
Johnny 11.02.2017 21:59
quelle
1

Dies ist ein normales Verhalten in der MVC-Vorlage , da externe Logins versuchen, einen Benutzer zu erstellen. Wenn die E-Mail des Benutzers (oder die externe Identität) bereits vorhanden ist, versuchen Sie, sich anzumelden. Darüber hinaus versucht der externe Anmeldeprovider, eine optionale und eindeutige Kennung in Ihrer Anwendung (lokal) getrennt von Ihrer externen Identität zuzuweisen. Aber das Folgende ist seltsam , wie Sie gesagt haben:

  

Wenn ich die E-Mail so belasse, wie sie ist und auf den "Registrieren" -Button klicke, wird es angezeigt   Mir ist diese Adresse schon vergeben, da ich mich schon früher auf meiner registriert habe   App eigenen Login-Provider.

Das sollte funktionieren, da die externe ID jedes Benutzers in anderen Sites eindeutig sein sollte (ich glaube), es sei denn, Sie haben mehrere externe Konten mit derselben Identität registriert, da die Tabellenstrukturen wie folgt aussehen:

Die Spalte UserId wird mit der Spalte UserId der Balgtabelle verglichen:

Die Nachricht wird nur selten angezeigt, wenn ein Benutzer versucht, doppelte Username zuzuweisen, die auf anderen Websites mit Ihrer E-Mail- oder Identitätsbezeichnung aufgelistet wird (z. B. [email protected] wird somename sein) als Username )

    
Amirhossein Mehrvarzi 27.09.2015 10:39
quelle
0

TLDR Sie müssen alle Szenarios manuell in Ihrer Funktion ExternalLoginConfirmation durchlaufen und eine Datenbanktabelle verwenden, um die Mitgliedsbenutzer-ID mit der OAuth-Benutzer-ID abzugleichen. Auf diese Weise können Sie mehrere OAuth-Konten mit einem einzelnen lokalen Konto verknüpfen.

Unten ist ein Codeausschnitt von einem unserer Projekte - hoffentlich ist es klar genug

%Vor%

und OAuthWebSecurity ist eine Hilfsklasse, die sich mit allen von Ihnen unterstützten Anbietern beschäftigt:

%Vor%     
avs099 23.09.2015 15:31
quelle
-1

Dieser folgende Link zeigt Ihnen, wie Sie eine ASP.NET MVC 5-Webanwendung erstellen, mit der Benutzer sich mit OAuth 2.0 mit Anmeldeinformationen eines externen Authentifizierungsanbieters wie Facebook, Twitter, LinkedIn, Microsoft oder Google anmelden können. Der Einfachheit halber konzentriert sich dieses Tutorial auf die Arbeit mit Anmeldeinformationen von Facebook und bestehenden Google-Konten.

Siehe Folgendes:

MVC 5 App mit Facebook, Twitter, LinkedIn und Google OAuth2 Anmeldung (C #)

    
Manraj 29.09.2015 08:36
quelle