2014-02-05 104 views
3

我正在使用AngularJS和開箱即用的WebApi2令牌身份驗證模板(個人用戶帳戶)創建站點。我想在同樣的時間內登錄兩個網站,一個在www.domain.com,另一個在sub.domain.comWeb Api 2子域令牌身份驗證

目前我使用下面的代碼在角來認證用戶:

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

我開始懷疑我是否應該使用在當前情況下的cookie令牌認證...

回答

1

這在follow up post: Local/session storage won't work across domains, use a marker cookie中有解釋。

您可以從javascript創建一個用於存儲令牌的cookie的.domain.com。餅乾,本地存儲和會話存儲是瀏覽器具有存儲信息的方式:

...我們不使用cookie作爲身份驗證機制,就像恰好橫跨支持存儲信息的 存儲機制 不同的域名。

+1

我認爲將標記存儲在cookie中是一個很大的不不不不? – kiwijus