2014-02-05 4 views
3

Я создаю сайт с использованием AngularJS и шаблона аутентификации токена WebApi2 (индивидуальные учетные записи пользователей). Я пытаюсь получить два сайта, чтобы войти в систему, в то же время, один на www.domain.com, а другой на sub.domain.comWeb Api 2 subdomain Аутентификация тока

В настоящее время я использую следующий код в угловом для аутентификации пользователя:

$http({ 
      method: 'POST', 
      url: '/Token', 
      data: serializedData, 
      headers: { 
       'Content-Type': 'application/x-www-form-urlencoded' 
      } 
     }).success(function (data, status, headers, config) { 
      $window.sessionStorage.token = data.access_token; 
     }); 

и добавить заголовок авторизации для каждого запроса после:

app.factory('authInterceptor', function ($rootScope, $q, $window) { 
     return { 
      request: function (config) { 
       config.headers = config.headers || {}; 
       if ($window.sessionStorage.token) { 
        $window.sessionStorage.loggedIn = true; 
        config.headers.Authorization = 'Bearer ' + $window.sessionStorage.token; 
       } 
       return config; 
      } 
     }; 
    }); 

    app.config(function ($httpProvider) { 
     $httpProvider.interceptors.push('authInterceptor'); 
    }); 

Вышеприведенный код позволяет каждому сайту входить в систему индивидуально, однако sessionstorage не сохраняется на других окнах/вкладках, поэтому он не будет входить в систему для входа в субдомен.

Есть некоторые комментарии в этом блоге относительно этого вопроса (на полпути вниз): http://blog.auth0.com/2014/01/07/angularjs-authentication-with-cookies-vs-token/

Однако это кажется слишком сложным для реализации (и иметь нежелательный эффект от пользователя перенаправляют). Я надеялся на что-то же просто, как установка домена, так же, как с печеньем:

app.UseCookieAuthentication(new CookieAuthenticationOptions() 
      { 
       CookieDomain = ".domain.com" 
      }); 

я начинаю сомневаться в том, должен ли я использовать маркер аутентификации через куки в текущем сценарии ...

ответ

1

Это было объяснено в follow up post: Local/session storage won't work across domains, use a marker cookie.

Вы можете создать файл cookie для .domain.com из javascript для сохранения токена. Печенье, локальное хранение и хранение сессии являются способами браузера для хранения информации:

... мы не используем кук, как механизм аутентификации, так как механизм хранения, что происходит, чтобы поддержать сохранение информации через разные домены.

+1

Я думал, что хранить токен в печенье было большим, нет? – kiwijus