0

У меня есть проект с AngularJS и WebApi2 и FormAuthentication. Поскольку мне нужно импортировать старый код из проекта WebForms, который использует сеанс для хранения некоторых пользовательских переменных, мне нужно реализовать Session в WebApi.Переадресация статуса веб-api 302

В WebConfig у меня есть:

`

<authentication mode="Forms"> 
     <forms loginUrl="/index.html" defaultUrl="/Areas/Modeler/modeler.html" name=".ASPXFORMSAUTH" protection="All" cookieless="UseDeviceProfile" slidingExpiration="true" path="/" domain="" requireSSL="false" timeout="600" enableCrossAppRedirects="false"> 
     </forms> 
</authentication> 
<authorization> 
     <allow users="*" /> 
</authorization> 
<machineKey validationKey="xxxxx" decryptionKey="xxxxxx" validation="SHA1" /> 
</system.web> 
<location path="Scripts"> 
    <system.web> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
</location> 
<location path="~/Authenticate"> 
    <system.web> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
</location> 

`

Я сделал следующие изменения в Global.asax.cs для осуществления сеанса:

`

public override void Init() 
     { 
      this.PostAuthenticateRequest += Application_PostAuthorizeRequest; 
      base.Init(); 
     } 
protected void Application_Start() 
     { 
      AreaRegistration.RegisterAllAreas(); 
      GlobalConfiguration.Configure(WebApiConfig.Register); 
      GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always; 
     } 
protected void Application_PostAuthorizeRequest(object sender, EventArgs e) 
     { 
      var url = HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath; 
      var auth = Context.Request.IsAuthenticated; 
      HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required); 
     }` 

После ввода пользователем имени и пароля я вызываю метод post ~/Authenticate/Login.

В хромированной вкладке браузера сети можно увидеть следующие два строки: Войти Метод: POST, Статус 302 Метод Логин GET, Статус 405 Для первого звонка:

Remote Address:[::1]:52966 Request URL:http://localhost:52966/Authenticate/Login Request Method:POST Status Code:302 Found Response Headers view source Content-Length:166 Date:Thu, 14 May 2015 13:11:24 GMT Location:/(S(tdd41h23pms5lllzyro1hltq))/Authenticate/Login Server:Microsoft-IIS/8.0 X-Powered-By:ASP.NET X-SourceFiles:=?UTF-8?B?RDpcUHJvamVjdH..............=?= Request Headers view source Accept:application/json, text/plain, */* Accept-Encoding:gzip, deflate Accept-Language:en-US,en;q=0.8,ro;q=0.6 Connection:keep-alive Content-Length:44 Content-Type:application/json;charset=UTF-8 Cookie:PHPSESSID=d5djbkgs7ttui073jl04mg6st3; __AntiXsrfToken=97b6e321343944a89ade4acc098305bd; ASP.NET_SessionId=2ggakcj1qxtewgsrh5qvtw40; _session_id=BAh7B0kiD3Nlc3Npb25faW....; .AspNet.ApplicationCookie=GcQUqnFHbPaX...; UserPassword=password; UserName=admin; .ASPXFORMSAUTH=7B15EE3DE... DNT:1 Host:localhost:52966 Origin:http://localhost:52966 Referer:http://localhost:52966/index.html User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Request Payload view source {userName: "admin", userPassword: "password"}

вопрос: почему вызов для входа перенаправляется? В методе Application_PostAuthorizeRequest из Global.ascx.cs ai проверяет Context.Request.IsAuthenticated и является истинным.

ответ

1

Перенаправление происходит из конфигурации. Вы настроили loginUrl и defaultUrl. Здесь пользователь будет отправлен до и после проверки подлинности.

+0

Проблема не существует, если я не вношу изменений для использования сеанса в Webapi. И это способ настройки проверки подлинности в Web.config. – BogdanIM

+0

Ваш вопрос был «почему звонок для входа перенаправлен?». Мой ответ заключается в том, что у вас есть «index.html», настроенный как страница входа. Поэтому, когда вы пытаетесь получить доступ/Authenticate/login, вы перенаправляетесь на «index.html», если вы еще не прошли аутентификацию. Это может быть отдельной проблемой из проблемы сеанса. –

+0

Хорошо. то почему так не происходит, когда я не использую сеанс? В этом случае метод web api выполняется с кодом состояния 200. – BogdanIM