猿问

具有成员资格提供程序的ASP.NET MVC 4 Web API身份验证

我有一个使用Web API的ASP.NET MVC 4项目。在控制器上,我已使用[Authorize]属性将类设置为需要授权。对于身份验证,我使用的是ASP.NET成员资格提供程序,并将Web.Config设置为使用“表单”身份验证。这是我被困的地方:

一切工作正常,直到完成测试API的工作,并且我想使用[Authorize]属性保护控制器,以便可以开始针对我的Membership Provider中的用户测试身份验证。因此,我启动了Fiddler,并添加了Authorization:Basic属性以及来自会员资格提供者的username:password进行了相同的调用,如下所示:

我得到的响应是未经授权的401,在“验证”下得到“没有WWW验证标头”。然后,我意识到API正在寻找SHA1编码的密钥。因此,我从搜索中启动了SHA1生成器,并为我的用户名:password获取了哈希,并按如下方式更新了我的请求标头:

这也不起作用,我得到相同的结果。同样,我显然也需要与服务器一起使用的某种“共享密钥”来解码我的用户名/密码。

所以我的问题是:

如何从服务器(或在这种情况下,VS VS 2012运行的虚拟IIS)中获取此密钥。

如何使用此方法使用来自ASP.NET成员资格提供程序的用户名/密码在Fiddler中进行经过身份验证的调用。

我将如何在客户端应用程序中使用它进行相同的调用(C#WPF应用程序)。

与HTTP调用上的SSL结合使用时,这种方法最有效吗?如果不是,那是什么?

提前致谢!

犯罪嫌疑人X
浏览 396回答 3
3回答

芜湖不芜

我自己无法在一个新项目中复制它。但是与此同时,我发现User主体在ApiController构造函数中是正确的,但在控制器方法中是错误的。在两者之间是一个自定义MediaTypeFormatter。通过设置一些断点,我看到调用链是:ApiController构造函数-> MediaTypeFormatter-> ApiController方法。尽管在格式化程序中我不使用任何与安全相关的内容,但主体还是被覆盖了。如果我注释掉global.asax中的格式化程序注册,则主体保持正确。我需要继续调试...
随时随地看视频慕课网APP
我要回答