8

Я следую this tutorial, чтобы создать простое приложение MVC 5 с внешней аутентификацией. Он работает нормально, но, если я меняю authentication mode="None" на authentication mode="Forms", он перестает работать.MVC 5 Внешняя аутентификация с режимом аутентификации = Формы

Я получаю нуль на:

await HttpContext.GetOwinContext().Authentication.GetExternalLoginInfoAsync() 

Я много читал о чем-то, чтобы подавить FormsAuthentication на перенаправлении. Я не знаю, правильно ли это, но я попытался установить этот nuget packet, и проблема все еще там.

Итак, почему я получаю null каждый раз, когда меняю режим аутентификации?

ответ

18

Я смог получить эту работу (OWIN и FormsAuthentication), добавив Response.SuppressFormsAuthenticationRedirect = true в класс ChallengeResult.

Если вы следуете учебнику, вот код:

public class ChallengeResult : HttpUnauthorizedResult 
{ 
    public ChallengeResult(string provider, string redirectUri) 
     : this(provider, redirectUri, null) 
    { 
    } 

    public ChallengeResult(string provider, string redirectUri, string userId) 
    { 
     LoginProvider = provider; 
     RedirectUri = redirectUri; 
     UserId = userId; 
    } 

    public string LoginProvider { get; set; } 
    public string RedirectUri { get; set; } 
    public string UserId { get; set; } 

    public override void ExecuteResult(ControllerContext context) 
    { 
     // this line did the trick 
     context.RequestContext.HttpContext.Response.SuppressFormsAuthenticationRedirect = true; 

     var properties = new AuthenticationProperties() { RedirectUri = RedirectUri }; 
     if (UserId != null) 
     { 
      properties.Dictionary[XsrfKey] = UserId; 
     } 

     context.HttpContext.GetOwinContext().Authentication.Challenge(properties, LoginProvider); 
    } 
} 
+1

благодарит за репутацию! Я долго натягивал голову. Я не могу понять, почему он был перенаправлен на форму входа, если метод ExternalLogin является AllowAnonymous! –

1

Обычно вы устанавливаете authentication mode="None", когда пользователи не аутентифицируются вообще, или если вы планируете разработать собственный код аутентификации. MVC 5 был обновлен, чтобы использовать идентификатор ASP.NET для аутентификации.

Идентификатор ASP.NET поддерживает аутентификацию на основе утверждений, где идентификатор пользователя представлен в виде набора требований. Здесь вы устанавливаете authentication mode="Forms", претензии не будут работать, потому что ASP.NET Forms Authentication не поддерживает претензии. Вот почему вы получаете нулевое значение.

+0

Я был в состоянии получить эту работу (Owin и FormsAuthentication), добавив Response.SuppressFormsAuthenticationRedirect = верные действия. –

Смежные вопросы