Jul*_*ien 12 c# asp.net asp.net-web-api
我正在寻找帮助创建具有自定义用户名/密码身份验证的Web API.
我有自己的数据库来验证用户,我不想使用Windows身份验证.
我希望能够使用类似的属性来装饰我的web api调用[Authorize],这样在没有登录的情况下进行的调用将会失败.
我不想将凭证作为参数传递给每个方法.
该API主要由使用Xamarin PCL的移动设备使用.
Web API必须使用SSL.
这似乎是一个简单的设置,但我的谷歌搜索没有透露任何超级有用的命中.
理想情况下,我想要一个Login控制器,它授权用户并允许后续的方法调用.
有人可以提供基本的例子或一些好的阅读材料吗?
Fra*_*ans 13
这是一个很大的主题,你可能需要花一些时间来掌握基础知识,抱歉.
那就是说...为了对后续方法调用进行身份验证,您需要一些可以随每个请求传回的内容.如果你从网站上调用你的api,比如因为你使用的是Angular或类似的,那么一个简单的cookie(适当加密和MACed)就可以了.具体如何实现这取决于您是否使用OWIN以及您的项目中是否还有MVC来提供您的页面.不要自己创建cookie,使用FormsAuthentication或等效的OWIN中间件.你不需要使用微软的会员资格或身份,但要注意做自己的密码处理并不简单,你真的需要知道你正在做什么 - 如果你想要的话,没有什么可以替代大量的研究要做到这一点.
如果你需要从网站以外的地方调用api,那么cookie就很痛苦.另外请注意,使用您需要了解和防范的cookie和Web API时,存在一些微妙的CSRF漏洞.
Cookie的替代方法是嵌入类似ThinkTecture Identityserver(它是免费的)并使用它来发布oAuth令牌,然后将它们附加到每个API请求.它有许多优点,但也更复杂.
资源
你确实要求指出从哪里开始阅读.由于Microsoft在过去几年中多次改变其"默认"方法,因此您的任务变得复杂.当前的默认方法是Identity,它取代了之前的MembershipProvider(很好的解决方案).如果你是这个新手,我建议你走这条路线说实话 - 你可以扩展它,并且非常好地与大部分剩余的堆栈联系起来.是的,您失去了一些灵活性,您需要将其包装在当前的用户商店中.但是你需要问自己,你开箱即用的安全性是不值得的.
我也会推荐Brock Allen的博客.这是相当硬的,但他知道他的东西,并将经常解释许多微软认证技术的内部.
我建议你尝试阅读"OWIN认证中间件".这就是它的全部,尤其是ASP.Net vNext.可悲的是,大多数文档都集中在它的使用上是多么容易(而且是 - 用于演示)但缺乏关于它如何真正起作用的任何深入信息,这可能非常令人沮丧.
为了掌握令牌和不同标准的工作原理,我建议你在这里观看这个视频:http://www.ndcvideos.com/#/app/video/2651
然后看看Azure Mobile Services,它甚至还有用于处理我认为的auth或ThinkTecture Identity Server的客户端库.即使你最终没有使用IdSrv,通过他们关于如何使用它的教程,你将学到很多关于整个事情如何工作的很多东西; 这一切都基于开放标准.文档:http://identityserver.github.io/Documentation/docs/ 尝试完成他们的教程; 他们使用Windows控制台应用程序代替应用程序,但概念是相同的.
我希望你好运,但我想最后说,请不要只是一起破解似乎有用的东西.Web安全性越来越复杂,很容易在代码中留下漏洞 - 我从经验谈起:)
不要成为Moonpig.