Ich verstehe nicht, warum ihre ist kein klares Tutorial oder Richtlinie zu diesem Thema, so dass ich hoffe, meine Frage kann hier beantwortet werden.Registrieren Externe Login Web API
Also, versuchen, Benutzer von Facebook oder Google registrieren, über die Web-API.
Das Problem ist, an der RegisterExternal
Methode, auf dieser Linie:
var info = await Authentication.GetExternalLoginInfoAsync();
Es gibt null zurück, und damit ein BadRequest()
Rückkehr Was ich so weit gekommen:
In Startup.Auth.cs
Ich habe die IDs und die Geheimnisse hadded, beachten Sie, dass ich auch versucht habe mit Microsoft.Owin.Security.Facebook
var facebookOptions = new Microsoft.Owin.Security.Facebook.FacebookAuthenticationOptions
{
AppId = "103596246642104",
AppSecret = "1c9c8f696e47bbc661702821c5a8ae75",
Provider = new FacebookAuthenticationProvider()
{
OnAuthenticated = (context) =>
{
context.Identity.AddClaim(new System.Security.Claims.Claim("urn:facebook:access_token", context.AccessToken, ClaimValueTypes.String, "Facebook"));
return Task.FromResult(0);
}
},
};
facebookOptions.Scope.Add("email");
app.UseFacebookAuthentication(facebookOptions);
app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions()
{
ClientId = "328779658984-t9d67rh2nr681bahfusan0m5vuqeck13.apps.googleusercontent.com",
ClientSecret = "ZYcNHxBqH56Y0J2-tYowp9q0",
CallbackPath = new PathString("/api/Account/ManageInfo")
});
facebookOptions Quelle: this post
Das zusätzliche facebookOptions nicht das Problem lösen hat.
Ich kann ein access_token von Google und Facebook abrufen. Ich bin auch mit diesem access_token zu api/Account/UserInfo
GET http://localhost:4856/api/Account/UserInfo
in the header:
Authorization: Bearer R9BTVhI0...
zu Authentifizieren der Lage Welche zurück: {"Email":"firstname lastname","HasRegistered":false,"LoginProvider":"Facebook"}
Eine Frage, die ich ihr bemerken, ist, dass es meinen Namen als E-Mail zurück, nicht die eigentliche E-Mail-Adresse ein.
Jetzt möchte ich die externe Login mit einem neuen Benutzer für meine Datenbank registrieren, die ich eine POST-Aufruf wie folgt machen:
POST http://localhost:4856/api/Account/RegisterExternal
[header]
authorization: bearer 6xcJoutY...
Content-Type: application/json
[body]
{"Email":"[email protected]"}
Quelle: this post
Nun ist diese auf diese eine BadRequest kehrt Code snippit, innen RegisterExternal():
public async Task<ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
//AuthenticationManger?
var info = await Authentication.GetExternalLoginInfoAsync();
if (info == null)
{
return InternalServerError();
}
In Debugging funktioniert die ExternalLoginConfirmationViewModel
meine E-mail-Adresse enthalten.
Was mache ich falsch? Muss ich etwas zum Startup.cs
hinzufügen? Gibt es noch etwas, was ich in der Startup.Auth.cs
zu tun habe? Rufe ich falsch RegisterExternal
? In MVC geht es so reibungslos, warum nicht in der Web-API?
Aso sah this answer von this question, aber ich habe nicht verstanden, wie dies zu implementieren ist.
War dies jemals gelöst? Ich habe das gleiche Problem. –
Schließlich habe ich die Authentifizierung mit Facebook auf der App-Seite gemacht, wie es bei der Entwicklung von Apps sein sollte. Verwenden Sie dann das externe Zugriffstoken, um meine Benutzer bei meiner API zu registrieren. Im Anschluss an diese Anleitung: http://bitoftech.net/2014/08/11/asp-net-web-api-2-external-logins-social-logins-facebook-google-angularjs-app/ Wenn Sie externen Zugriff haben Token, können Sie das verwenden, um die Benutzerinformationen mit dem Facebook Graph API zu erhalten. Hier ist eine Antwort für diese in Android: http://StackOverflow.com/Questions/31314124/get-Email-and-Na-Facebook-SDK-V4-4-0-Switch – CularBytes
Vielen Dank, sehr hilfreich. –