2013-02-28 52 views
4

如何實現辛格運河點登錄(SSO)的跨域MVC4 Web應用程序如何實現單點登錄在MVC4

+0

嘿你試過了什麼?同樣如果我們說SSO大部分時間可能會參與系統,並且您需要更好地解釋您的問題才能獲得真正的解析器 – 2013-02-28 06:08:59

+0

我正在登錄MVC4中的一個Web應用程序。現在,在此站點上進行身份驗證後,用戶會嘗試執行某些操作。要執行此操作,用戶將使用相同的憑據重定向到另一個MVC4 Web應用程序。這兩個應用程序都位於相同或不同的域中。但我對跨域應用程序更感興趣。希望這個細節澄清我的問題.. – 2013-02-28 06:13:48

回答

1

最後,我能夠實施。以下是與應用2到登錄我在應用1

  • 獲取選項進行

    • 登錄的步驟
    • 點擊「與應用2登陸」
    • 重定向到應用2
    • 的登錄屏幕上點擊重定向到SSOInMVCWcfService的App2的Login按鈕。這裏,Login方法調用App1服務的方法Authenticate,即SSOAuthService。如果通過身份驗證,則會爲此用戶名生成令牌,並從App1的服務中檢索用戶ID。
    • 一旦爲此Authenticated用戶生成了標記併爲用戶標識檢索到這些值,就會在數據庫中的表中輸入'SessionDetails'。
    • 然後發送當前用戶的用戶標識和令牌給App2。
    • 現在,App2通過在響應對象中添加這些值作爲cookie,將app1的returnurl,即認證頁面url以及用戶標識和標記發送到App1的登錄頁面。
    • 現在在App1登錄頁面上檢索這些cookie,並在userid的基礎上從「SessionDetails」表中檢索當前用戶名。
  • 13

    同域SSO可以通過窗體身份驗證Cookie的domain屬性設置爲根可以輕鬆實現域併爲兩個應用程序配置相同的機器密鑰。

    跨域SSO更具挑戰性。有不同的技術來實現它。例如StackExchange使用HTML5本地存儲。他們的機制在this blog post中描述。

    下面是一些基本步驟:

    1. 設置爲用戶的主域名登錄。例如,logon.com
    2. 當未經身份驗證的用戶嘗試訪問2個應用程序中某些應用程序的受保護資源時,他將被重定向到登錄域進行身份驗證。
    3. 用戶進行身份驗證,並且登錄域將生成包含登錄用戶的用戶名的會話標識符。此會話ID使用對稱算法進行加密,並在3個域之間共享一個祕密。登錄域還會設置表單身份驗證Cookie,以指示用戶在那裏已經通過身份驗證。
    4. 登錄域重定向回傳遞給會話標識符的受保護資源。
    5. 持有受保護資源的應用程序將解密會話標識以提取用戶名並在其域中設置表單身份驗證Cookie。
    6. 用戶請求第二個域上的受保護資源。
    7. 由於他尚未通過身份驗證,因此他被重定向到登錄域。
    8. 用戶已在登錄域上進行身份驗證,並使用相同技術生成會話標識並將其傳回
    9. 第二個域解密會話標識符以提取用戶名併發出第二個域的表單身份驗證Cookie。

    至於用戶名加密到會話標識符的替代方案中,登錄域可以簡單地將該信息存儲到共享(3個結構域之間)的數據存儲和會話標識符將簡單地是這個記錄的識別符,以便其他域可以從此共享數據存儲中檢索用戶名。

    +0

    如何在3個域之間加密共享祕密的會話ID。 – 2013-02-28 06:59:25

    +0

    最後,我能夠實現..以下是我已經完成的步驟 – 2013-03-13 11:10:21

    +0

    @Darin真的很好的解釋,謝謝! – formatc 2013-05-15 13:01:43