我試圖確定如何在窗體身份驗證下配置對Web API控制器服務的訪問。如果我添加授權配置通過將授權元素拒絕所有匿名用戶:使用表單身份驗證的Web API匿名服務訪問
<授權>
< - 拒絕所有匿名用戶 - >
<拒絕用戶=「? 「/>
< /授權>
只有登錄頁面被訪問的預期。但我也想訪問從控制器返回的列表。我將[AllowAnonymous]屬性添加到一個簡單的服務,該服務返回用於填充下拉菜單的值。例如:
namespace WebAPI.Controllers
{
public class RegisterController : ApiController
{
[AllowAnonymous]
public List<ListElement> GetActivitiesList()
{
List<ListElement> li = new List<ListElement>();
li.Add(new ListElement() { Id = 1, Text = "Item 1" });
li.Add(new ListElement() { Id = 2, Text = "Item 2" });
li.Add(new ListElement() { Id = 3, Text = "Item 3" });
return li;
}
}
}
我增加了控制器目錄在web.config允許列表:
<位置路徑= 「控制器」 >
<的System.Web >
<授權>
<允許用戶= 「*」/ >
< /授權>
</system.web>
< /位置>
如果我瀏覽我的示例頁面來調用控制器,形成認證即使我添加了[AllowAnonymous]屬性,仍然拒絕使用302重定向到登錄頁面的訪問。如果我刪除了整個站點的授權元素「<拒絕用戶=」?「/ >」,我可以使用[授權]和[允許匿名]屬性來控制訪問。
目標是爲匿名用戶在幾個頁面上使用特定的服務(如註冊),而其餘的站點訪問僅限於經過身份驗證的用戶。訪問服務與訪問文件不完全一樣,所以我的猜測是我必須爲這種情況編寫一個特殊的處理程序,但我不確定如何去處理它。
我應該提到,我更新Web窗體應用程序,通過的NuGet安裝的Web API增強。該項目不是一個MVC應用程序。考慮到潛在的安全風險,最好的做法是創建一個新的Web API應用程序。感謝那個指針。 – John