Аутентификация токена на поддомене Web Api 2

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

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

 $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');
    });

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

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

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

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

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

1 ответ

Это было объяснено в последующем сообщении: локальное / сессионное хранилище не будет работать между доменами, используйте маркерный cookie.

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

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

Другие вопросы по тегам