我想使用ASP.NET SimpleMembership來認證使用我的WebAPI的用戶。 Thinktecture具有一個名爲Thinktecture.IdentityModel(http://thinktecture.github.com/Thinktecture.IdentityModel.45/)的美妙的身份驗證庫,其中包含一個將Forms Auth與基本身份驗證(source)關聯的示例。但是,該示例使用Membership.ValidateUser(),如果沒有ASP.NET成員資格提供程序不起作用,SimpleMembership不支持(source)(編輯:這不完全正確,請參閱下面的Mark的回答) 。Thinktecture.IdentityModel with SimpleMembership
編輯:
這裏就是我所做的:
1)通過的NuGet
3創建一個新的MVC互聯網應用
2)安裝Thinktecture.IdentityModel)通過腳手架創建模型和api控制器:
public class Goober
{
public int GooberId { get; set; }
public string GooberWords { get; set; }
}
4)冉項目,創建新用戶以及創建使用招
新落花生5)添加了[授權]至GetGoober(INT ID)
6)在加入WebApiConfig.cs:
var authConfig = new AuthenticationConfiguration();
authConfig.AddBasicAuthentication((userName, password) =>
Membership.ValidateUser(userName, password));
config.MessageHandlers.Add(new AuthenticationHandler(authConfig));
當我運行該項目,並打API /落花生/ 1提琴手我得到401 WWW身份驗證:未指定。但是如果我先使用AccountController登錄然後使用Fiddler,我會得到一個並且一切都很好。
編輯
好吧,我覺得這個問題是不是與我最初的問題。我懷疑它與模板中SimpleMembership的初始化有關。當我打開該項目並運行調試,然後用提琴手點擊api我無法通過驗證。但是當我只需點擊網頁前端的「註冊」鏈接時,就可以通過Auth。我猜這是因爲InitializeSimpleMembershipAttribute在AccountController被調用,所以直到控制器被調用才初始化?
我已經嘗試在Membership.ValidateUser()的地方使用WebSecurity.Login(),但不起作用。
我對如何實際執行此操作感到茫然。有人有建議嗎?或者,我試圖從錯誤的角度來解決這個問題?
嗨,馬克 - 感謝您的答覆!我沒有嘗試Membership.ValidateUser(),但無法讓它工作。當我回到辦公室時,我會在明天更新我的問題。我感謝您的幫助! – brudert
@brudert偉大的東西,讓我知道錯誤是什麼爲ValidateUser(),我們可以得到修復。 –
謝謝,我用更多的細節更新了我的問題 – brudert