我想使用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