2010-09-30 73 views
2

我有一個使用基本表單身份驗證的現有asp.net mvc網站。該網站有一個登錄頁面,該頁面回到登錄操作,通過FormsAuthentication.SetAuthCookie()記錄用戶。我正在尋找添加api到網站,作爲一個mvc2區域,用戶將根據作爲http標頭傳遞的令牌進行身份驗證。該區域將僅包含json操作,因此將用戶重定向到登錄頁面沒有任何意義。相反,我希望用戶只需在每個請求中傳遞一個令牌。該令牌映射到每個用戶帳戶,並且用戶將被自動驗證。添加每個請求,基於令牌的身份驗證到asp.net mvc站點

我正在努力把這個邏輯放在哪裏。此時,最好的選擇似乎是將頭部查找邏輯和身份驗證添加到Application_AuthenticateRequest方法中的Global.asax中。不過,我想避免在調用FormsAuthentication.SetAuthCookie()之後重定向用戶。我希望登錄操作對他們透明。

我接近這個錯誤的方式嗎?

附註:由於該網站有多個用戶,因此無法爲api請求提供用戶名/密碼。有些使用OpenID加入,而其餘加入使用用戶名/密碼。

回答

4

沿着向Global.asax中的Application_AuthenticateRequest事件添加標題查找的道路。代碼看起來像這樣:

private const string AuthorizationHeader = "Authorization"; 

if (!string.IsNullOrWhiteSpace(request.Headers[AuthorizationHeader])) 
{ 
    try 
    { 
    // Remove Basic from beginning and then decode the string 
    var token = request.Headers[AuthorizationHeader].Substring(6); 
    token = new ASCIIEncoding().GetString(Convert.FromBase64String(token)).Split(':')[0]; 

    return UserService.FetchByApiToken(token); 
    } 
    catch 
    { 
    } 
} 
1
+3

不幸的是,我不使用WCF,說實話...我不想。它看起來像一個過度架構的混亂,很可能會被1-2年的其他東西所取代......該網站不是企業,不需要複雜程度 – 2010-09-30 17:10:43

+0

哦,我感覺你100%,因爲我在這些企業項目之一的深度。但是WCF休息服務的故事非常乾淨。在我通過判斷之前,我會先看看入門套件。 – 2010-09-30 17:18:44

+1

Web API已成爲執行REST服務的新方式。看起來WCF已經超越了預測。對於問題域的架構確實存在(並不是說它沒有非常有效的場景)。 :) – Marchy 2012-05-10 18:43:57