2014-07-27 12 views
5

skonfigurowałem moje WebAPI OAuth 2.0 w tych wierszach:WebAPI OAuth UseOAuthBearerAuthentication daje "sekwencja zawiera więcej niż jeden element" błędzie

app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions 
    { 
     Provider = new OAuthBearerAuthenticationProvider(), 
    }); 

    app.UseOAuthBearerTokens(OAuthOptions); 

Ale to daje mi następujący błąd na każde żądanie:

Message : An error has occurred. 
ExceptionMessage : Sequence contains more than one element 
ExceptionType : System.InvalidOperationException 
StackTrace : at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source) 
    at Microsoft.Owin.Security.AuthenticationManager.d__8.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 
    at System.Web.Http.HostAuthenticationFilter.d__0.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Web.Http.Controllers.AuthenticationFilterResult.d__0.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 
    at System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext() 

My OAuthOptions jest:

OAuthOptions = new OAuthAuthorizationServerOptions 
    { 
     TokenEndpointPath = new PathString("/Token"), 
     Provider = new ApplicationOAuthProvider(PublicClientId, UserManagerFactory), 
     AuthorizeEndpointPath = new PathString("/Account/ExternalLogin"), 
     AccessTokenExpireTimeSpan = TimeSpan.FromDays(14), 
     AllowInsecureHttp = true, 
    }; 
} 

Jeśli komentarz UseOAuthBearerAuthentication wszystko jest ok! Nie dostosowałem jeszcze OAuthBearerAuthenticationProvider i używam go bezpośrednio, ale dlaczego powoduje błąd?

Odpowiedz

29

To powinien być błąd! Użyj

app.UseOAuthAuthorizationServer(OAuthOptions);

zamiast

app.UseOAuthBearerTokens(OAuthOptions);

+1

Jesteś światło szabla –

+0

Witam, mam ten sam problem. To działało dla mnie, ale teraz już nie działa. Znalazłem kilka wątków, które sugerowały, że możliwą przyczyną jest aktualizacja wersji Owin od 3.0.0 do 3.0.1. Jednak nawet jeśli zarejestrowałem 3.0.0, to nie działa to dla mnie. Próbowałem powyższego rozwiązania, ale nadal nie działa. Czy mógłby tu być jeden przewodnik? –

+0

Zadaj pytanie w nowym wątku. Nikt nie może zobaczyć twojego pytania tutaj! –

Powiązane problemy