身份验证,使用WPF客户端对MVC 4 Web Api进行授权
本文关键字:Api Web 授权 MVC 使用 WPF 客户端 身份验证 | 更新日期: 2023-09-27 18:12:35
我在VS 2012中使用实体框架代码优先和wpf应用程序作为客户端创建了MVC 4 Web Api。
我目前正在努力解决的问题是,我必须从客户端启用身份验证并授权用户访问Api(例如:每个经过身份验证的用户都可以访问GET方法,但只有管理员可以使用POST或DELETE)。我使用MVC 4 Internet应用程序,因为已经包含表单身份验证,它工作得很好,直到我试图从我的客户端应用程序登录。在花了一些时间研究我的问题后,我意识到表单身份验证主要应该与web浏览器一起工作。我甚至找到了一些可能的解决方案,让它与使用CookieContainers的HttpClient(例如:我如何在HttpClient's HttpRequestMessage上设置cookie)一起工作,但对我来说没有任何作用。
花了几个小时研究完成我想做的事情的方法后,我觉得完全卡住了。
我读过SimpleMembershipprovider, BasicAuthentication, OAuth,还有人提到过Thinktecture。Identitymodel,但我真的无法决定哪一个效果最好。
如果真的没有办法使用表单认证时,与客户端以外的web浏览器连接,那么什么是最好的认证/授权方法采取?
提前感谢您的帮助!
您应该能够很容易地做到这一点,但是您还没有说明您的问题到底是什么。
- 无法访问您的web api操作,因为您没有登录;或
- 无法使其强制授权(即您可以获得对操作的匿名访问)
对于第二个场景:
关于在ASP中使用身份验证和授权有一个很好的概述。服务器端的。NET Web API,以及在action上执行不同角色的各种方法。
还有另一种方法适合于机器对机器(也就是说,你没有一个用户会在应用程序对话框中输入他们的登录细节)。. NET Web API是安全的,但它并不关注使用SimpleMembershipProvider。它没有使用框架auth&auth组件,而是使用令牌(注意这种方法-滚动您自己的安全性是非常非常困难的)。
对于第一种场景:
从客户端来看,这听起来像是你有一个c#应用程序,用户可以与之交互。如果是这种情况(而不是机器对机器场景),那么基于表单的方法仍然是合适的,并且您对cookie的处理是正确的。方法是:
- 要求客户端在你的应用程序中输入他们的用户名和密码
- 向你的AccountsController上的LogIn action发送请求,这将返回你的身份验证cookie,会话cookie等。
- 存储从这次(成功)登录返回的cookie(或者如果响应是"登录失败"通知客户端)
- 然后在web api 的请求中使用这些cookie
因为你已经在谈论使用HttpClient
,我猜你知道你在做什么,所以没有提供代码示例。我不会使用HttpClient
,为了它的价值,但HttpWebRequest
允许您通过HttpWebRequest.CookieContainer
属性保持常见的CookieContainer
。