为什么我通过外部登录回调不断收到此错误。这就是正在做的事情。
进口
using Microsoft.Owin.Security.MicrosoftAccount;
using Microsoft.Owin.Security;
我的AccountController.cs类
.
.
.
.
.
var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
if (loginInfo == null)
{
return RedirectToAction("Login", new { returnUrl = returnUrl});
}
.
.
.
.
我的 Startup.cs 类
.
.
.
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");
.
.
.
.
这是堆栈跟踪:
[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
我的代码中的哪一点 查看打印屏幕
google、twitter 和 facebook 的这种行为是相似的。外部身份验证似乎进展顺利,但回调抛出此异常。我感谢提供的任何建议。