Warum bekomme ich diesen Fehler mit externem Login-Callback. Hier ist was ich mache.Mvc5 ExternalLoginCallback: "await AuthenticationManager.GetExternalLoginInfoAsync()" schlägt fehl mit "Sequenz enthält mehr als ein Element"
Importe
using Microsoft.Owin.Security.MicrosoftAccount;
using Microsoft.Owin.Security;
Mein AccountController.cs Klasse
.
.
.
.
.
var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
if (loginInfo == null)
{
return RedirectToAction("Login", new { returnUrl = returnUrl});
}
.
.
.
.
Meine Startup.cs Klasse
.
.
.
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5));
//
app.UseExternalSignInCookie(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ExternalCookie);
.
.
//https://account.live.com/developers/applications/
//
microsoftAuthOptions = new MicrosoftAccountAuthenticationOptions()
{
ClientId = "xxxxxxx",
ClientSecret = "xxxxxxx",
CallbackPath = new PathString("/callbacks/microsoft"),
Provider = new MicrosoftAccountAuthenticationProvider()
{
OnAuthenticated = (context) =>
{
context.Identity.AddClaim(new System.Security.Claims.Claim("MicrosoftAccountAccessToken", context.AccessToken));
return Task.FromResult(0);
}
}
};
app.UseMicrosoftAccountAuthentication(microsoftAuthOptions);
//
twitterAuthOptions = new TwitterAuthenticationOptions()
{
ConsumerKey = "xxxxxxxx",
ConsumerSecret = "xxxxxxx",
CallbackPath = new PathString("/callbacks/twitter"),
Provider = new TwitterAuthenticationProvider()
{
OnAuthenticated = (context) =>
{
context.Identity.AddClaim(new System.Security.Claims.Claim("TwitterAccessToken", context.AccessToken));
return Task.FromResult(0);
}
},
BackchannelCertificateValidator = new CertificateSubjectKeyIdentifierValidator(new[]
{
"A5EF0B11CEC04103A34A659048B21CE0572D7D47", // VeriSign Class 3 Secure Server CA - G2
"0D445C165344C1827E1D20AB25F40163D8BE79A5", // VeriSign Class 3 Secure Server CA - G3
"7FD365A7C2DDECBBF03009F34339FA02AF333133", // VeriSign Class 3 Public Primary Certification Authority - G5
"39A55D933676616E73A761DFA16A7E59CDE66FAD", // Symantec Class 3 Secure Server CA - G4
"5168FF90AF0207753CCCD9656462A212B859723B", //DigiCert SHA2 High Assurance Server CA
"B13EC36903F8BF4701D498261A0802EF63642BC3" //DigiCert High Assurance EV Root CA
})
};
app.UseTwitterAuthentication(twitterAuthOptions);
//Configure Facebook External Login
facebookAuthOptions = new FacebookAuthenticationOptions() {
AppId = "xxxxxxxx",
AppSecret = "xxxxxxxx",
CallbackPath = new PathString("/callbacks/facebook"),
Provider = new FacebookAuthProvider()
{
OnAuthenticated = (context) =>
{
context.Identity.AddClaim(new System.Security.Claims.Claim("FacebookAccessToken", context.AccessToken));
foreach (var claim in context.User)
{
var claimType = string.Format("urn:facebook:{0}", claim.Key);
var claimValue = claim.Value.ToString();
if (!context.Identity.HasClaim(claimType, claimValue))
context.Identity.AddClaim(new System.Security.Claims.Claim(claimType, claimValue, "XmlSchemaString", "Facebook"));
}
return Task.FromResult(0);
}
}
};
facebookAuthOptions.Scope.Add("email");
facebookAuthOptions.Scope.Add("user_about_me");
facebookAuthOptions.Scope.Add("user_photos");
facebookAuthOptions.Scope.Add("user_location");
.
.
.
.
ist die Stack-Trace:
[InvalidOperationException: Sequence contains more than one element]
System.Linq.Enumerable.SingleOrDefault(IEnumerable`1 source) +305
Microsoft.Owin.Security.<AuthenticateAsync>d__8.MoveNext() +213
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +99
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58
Microsoft.Owin.Security.<GetExternalLoginInfoAsync>d__a.MoveNext() +189
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +99
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58
System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() +28
com.hwr.Controllers.<ExternalLoginCallback>d__37.MoveNext() in C:\Users\Bourne Koloh\Documents\Visual Studio 2015\Projects\com.hwr\com.hwr.mvc5\Controllers\AccountController.cs:804
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +99
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58
Welche View a print screen
Dieses Verhalten ähnlich wie in meinem Code hier zeigen ist für Google, Twitter und Facebook. Die externen Authentifizierungen scheinen gut zu laufen, aber der Callback löst diese Ausnahme aus. Ich freue mich über Vorschläge.
Was ist der Stack-Trace? – SLaks
@SLaks dort hast du es. Ich habe nur den relevanten Teil hinzugefügt –