2013-02-22 69 views
1

鑑於以下各方:ASP.Net MVC 4和基於聲明的安全Web客戶端之間,ASP.Net的WebAPI

基於瀏覽器的客戶端
ASP.Net MVC 4 Web應用程序
ASP.Net的Web API服務
安全令牌服務(STS),即Thinktecture IdentityServer
(注:Web應用程序和服務的WebAPI住在不同的盒子)

我想獲得類似這樣的工作流程:

用戶導航到WebApp時,應用程序在請求中看不到有效的令牌,並將用戶重定向到STS進行驗證。用戶登錄到STS,並在成功驗證後重定向回WebApp。 WebApp將看到有效的令牌並授予用戶訪問權限。用戶嘗試在WebApp上執行操作,這需要對WebAPI進行服務調用。 WebApp通過服務請求傳遞用戶令牌。 WebAPI服務會查看令牌,禁止訪問並返回錯誤,或代表用戶授權請求並返回結果。

此外,我希望客戶端能夠通過AJAX調用直接向WebAPI服務發起服務調用。

到目前爲止,我可以將流程與Web應用程序重定向到STS並返回,但是如何將令牌從Web應用程序傳遞到Web API服務?

另外,如何讓JavaScript客戶端在AJAX調用中傳遞令牌?

回答

1

嗯 - 如果您使用SAML,您可以立即做到這一點。

網站登錄返回SAML令牌,saveBootstrapContext功能保存令牌供以後使用 - 並且您可以將其轉發給您的web api。

在Web API中,您可以使用SAML用戶思維方式identitymodel。對於AJAX調用,提供一種從JS檢索SAML令牌並將其在授權標頭上發送給Web API的方法。

這不是最優的。但是對於通過JWT來完成(這將是首選方式) - 現在有些位缺失(例如,IdSrv只支持對稱簽名,我的JWT處理程序不支持引導上下文,MS JWT處理程序和對稱簽名配置也是一個問題)。

我正在爲此工作。但目前這種情況有一些粗糙的優勢。

+0

或使用cookie。 – flup 2013-02-22 20:16:02

+0

好吧 - 當然沒有cookie。各種組件位於不同的盒子上(可能有不同的域名 - 如果不是今天 - 也許明天)。 – leastprivilege 2013-02-23 08:35:21

0

如果兩個服務都位於同一個域中,則可以使用cookie。