У меня проблема с поставщиками OWIN OpenId в приложении ASP.NET MVC5, которое использует идентификатор ASP.NET и основано на шаблоне VS2013 с индивидуальной аутентификацией учетной записи пользователя. OWIN провайдеры OpenID для Google и LinkedIn используются для аутентификации входа.OWIN OpenID provider - GetExternalLoginInfo() возвращает null
Проблема в том, что кажется очень случайным; GetExternalLoginInfo() возвращает null при обратном вызове LoginConfirmation, даже если аутентификация входа прошла успешно.
var authManager = HttpContext.Current.GetOwinContext().Authentication;
var login = authManager.GetExternalLoginInfo();
Поставщики в использовании являются Google (Microsoft.Owin.Security.Google 2.1.0) и LinkedIn (от Owin.Security.Providers 1,3) и оба провайдера вызывает ту же проблему.
Иногда он терпит неудачу один раз, а затем снова работает, но иногда он просто продолжает сбой, пока AppPool не переработана.
В настоящее время два экземпляра приложения размещаются в IIS на той же виртуальной машине Windows Azure. Каждый экземпляр имеет свой собственный AppPool, но идентичные настройки (разные поддомены). Иногда логин перестает работать с одним экземпляром, но по-прежнему работает с другим экземпляром.
Проблема была воспроизведена локально (IIS Express - VS2013).
У всех возникли подобные проблемы с аутентификацией OWIN OpenID?
Startup.Auth.cs выглядит следующим образом:
public void ConfigureAuth(IAppBuilder app)
{
// Enable the application to use a cookie to store information for the signed in user
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
});
// Use a cookie to temporarily store information about a user logging in with a third party login provider
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
app.UseGoogleAuthentication();
app.UseLinkedInAuthentication("clientId", "clientSecret");
}
Следующие пакеты NuGet Owin используются:
<package id="Microsoft.AspNet.Identity.Core" version="1.0.0" targetFramework="net45" />
<package id="Microsoft.AspNet.Identity.Owin" version="1.0.0" targetFramework="net45" />
<package id="Microsoft.Owin" version="2.1.0" targetFramework="net45" />
<package id="Microsoft.Owin.Host.SystemWeb" version="2.1.0" targetFramework="net45" />
<package id="Microsoft.Owin.Security" version="2.1.0" targetFramework="net45" />
<package id="Microsoft.Owin.Security.ActiveDirectory" version="2.1.0" targetFramework="net45" />
<package id="Microsoft.Owin.Security.Cookies" version="2.1.0" targetFramework="net45" />
<package id="Microsoft.Owin.Security.Facebook" version="2.1.0" targetFramework="net45" />
<package id="Microsoft.Owin.Security.Google" version="2.1.0" targetFramework="net45" />
<package id="Microsoft.Owin.Security.Jwt" version="2.1.0" targetFramework="net45" />
<package id="Microsoft.Owin.Security.MicrosoftAccount" version="2.1.0" targetFramework="net45" />
<package id="Microsoft.Owin.Security.OAuth" version="2.1.0" targetFramework="net45" />
<package id="Microsoft.Owin.Security.Twitter" version="2.1.0" targetFramework="net45" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
<package id="Owin" version="1.0" targetFramework="net45" />
<package id="Owin.Security.Providers" version="1.3" targetFramework="net45" />
<package id="System.IdentityModel.Tokens.Jwt" version="3.0.2" targetFramework="net45" />
спасибо, что спасли меня целый день: D – phnkha
@Marcus Итак, нам нужно установить любое значение в сеансе? Или это должна быть специальная переменная сеанса, которую нужно установить? i.e Session ["ASP.NET_SessionId"]. Я использую проект веб-форм asp.net, а Login Login - null. Когда я перезапускаю свой пул приложений, он работает некоторое время и снова начинает давать нулевое значение. –
Вы можете поместить любое значение в сеанс, он будет создавать cookie ASP.NET_SessionId. – Marcus