title: Mvc5 ExternalLoginCallback : "await AuthenticationManager.GetExternalLoginInfoAsync()" fails with "sequence contains more than one element"
body: <p>Why do i keep getting this error with external login callback. Here is what am doing.</p>
  
  <p>imports</p>
  
  <pre><code>using Microsoft.Owin.Security.MicrosoftAccount;
  using Microsoft.Owin.Security;
  </code></pre>
  
  <p>My <strong>AccountController.cs</strong> class</p>
  
  <pre><code>.    
  .
  .
  .
  .
  var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
  if (loginInfo == null)
  {                    
      return RedirectToAction("Login", new { returnUrl = returnUrl});
  }
  .
  .
  .
  .
  </code></pre>
  
  <p><strong>My Startup.cs class</strong></p>
  
  <pre><code>.
  .
  .
  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) =&gt;
                  {
                      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) =&gt;
                  {
                      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 C‎A 
                      "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) =&gt;
                  {
                      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");
   .
   .
   .
   .
  </code></pre>
  
  <p>Here is the stack trace:</p>
  
  <pre><code>  [InvalidOperationException: Sequence contains more than one element]
     System.Linq.Enumerable.SingleOrDefault(IEnumerable`1 source) +305
     Microsoft.Owin.Security.&lt;AuthenticateAsync&gt;d__8.MoveNext() +213
     System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +99
     System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58
     Microsoft.Owin.Security.&lt;GetExternalLoginInfoAsync&gt;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.&lt;ExternalLoginCallback&gt;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
  </code></pre>
  
  <p>Which point here in my code
  <a href="http://i.stack.imgur.com/fKJi7.png" rel="nofollow">View a print screen</a></p>
  
  <p>This behavior is similar for google, twitter and facebook. The external authentications seems to go well but the callback throw this exception.
  I appreciate any suggestions offered.</p>