WebApi OAuth UseOAuthBearerAuthentication дает последовательность, содержащую более одного элемента ошибки

Я настроил свой WebApi OAuth 2.0 следующими строками:

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

    app.UseOAuthBearerTokens(OAuthOptions);

Но это дает мне следующую ошибку при каждом запросе:

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 is :

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

Если я прокомментирую UseOAuthBearerAuthentication, все будет в порядке! Я еще не настраивал OAuthBearerAuthenticationProvider и использую его напрямую, но почему он выдает ошибку?


person Mahmoud Moravej    schedule 27.07.2014    source источник


Ответы (1)


Это должен быть баг! Использовать

app.UseOAuthAuthorizationServer(OAuthOptions);

вместо

app.UseOAuthBearerTokens(OAuthOptions);

person Mahmoud Moravej    schedule 27.07.2014
comment
Ты световой меч - person Kunal B.; 18.07.2015
comment
Привет, у меня такая же проблема. Это работало для меня, но теперь это больше не работает. Я нашел несколько тем, в которых предполагалось, что возможная причина - обновление версии Owin с 3.0.0 до 3.0.1. Однако даже если я зарегистрировал 3.0.0, у меня это не работает. Пробовал вышеуказанное решение, но оно не работает. Может ли кто-нибудь руководство здесь? - person Abi P; 01.09.2015
comment
Задайте свой вопрос в новой теме. Здесь никто не увидит ваш вопрос! - person Mahmoud Moravej; 01.09.2015
comment
ты великолепен, я дергаю себя за волосы в последний день, ты делаешь мой день - person DKR; 17.02.2016
comment
@MahmoudMoravej - Хорошо, это стоило мне около дня ... может кто-нибудь объяснить, почему это работает? - person Diskdrive; 21.11.2017
comment
Это сэкономило мне время поиска. - person Stanley Okpala Nwosa; 08.03.2018
comment
Если кто-то пришел сюда из-за двухфакторной аутентификации, то моя проблема решилась просто удалением всей папки bin. Как здесь: stackoverflow.com/questions/10986909/ - person the scion; 04.02.2019
comment
Я столкнулся с подобной проблемой в одном из наших проектов. На ее решение ушло некоторое время, но я обнаружил, что UseIdentityServerBearerTokenAuthentication использовалась дважды. Удаление одного решило мою проблему - person AstroBoy; 10.08.2020