带有自定义身份validation的ASP.NET Web API

我正在寻找帮助创建具有自定义用户名/密码身份validation的Web API。

我有自己的数据库来validation用户,我不想使用Windows身份validation。

我希望能够使用[Authorize]等属性来装饰我的web api调用,这样在没有登录的情况下进行的调用将失败。

我不想将凭证作为参数传递给每个方法。

该API主要由使用Xamarin PCL的移动设备使用。

Web API必须使用SSL。

这似乎是一个简单的设置,但我的谷歌搜索没有透露任何超级有用的命中。

理想情况下,我想要一个Login控制器,它授权用户并允许后续的方法调用。

有人可以提供基本的例子或一些好的阅读材料吗?

这是一个很大的主题,你可能需要花一些时间来掌握基础知识,对不起。

那就是说…为了对后续方法调用进行身份validation,您需要一些可以随每个请求传回的内容。 如果你是从网站上调用你的api,比如因为你使用的是Angular或类似的,那么一个简单的cookie(适当加密和MACed)将起作用。 具体如何实现这取决于您是否使用OWIN以及您的项目中是否还有MVC来提供您的页面。 不要自己创建cookie,使用FormsAuthentication或等效的OWIN中间件。 你不需要使用微软的会员资格或身份,但要注意做自己的密码处理并不简单,你真的需要知道你正在做什么 – 如果你想要的话,没有什么可以替代大量的研究要做到这一点。

如果你需要从网站以外的地方调用api,那么cookie就很痛苦。 另外请注意,在使用您需要了解和防范的Cookie和Web API时,存在一些微妙的CSRF漏洞。

Cookie的替代方法是嵌入类似ThinkTecture Identityserver(它是免费的)并使用它来发布oAuth令牌,然后将它们附加到每个API请求。 它有许多优点,但也更复杂。

资源
你确实要求指出从哪里开始阅读。 由于微软在过去几年中多次改变其“默认”方法,因此您的任务变得复杂。 当前的默认方法是Identity ,它取代了之前的MembershipProvider(很好的解决方案)。 如果你是对此的新手,我建议你走这条路线说实话 – 你可以扩展它,并且非常好地与大部分剩余的堆栈联系起来。 是的,您失去了一些灵活性,您需要将其包装在当前的用户商店中。 但是你需要问问自己,你开箱即用的安全性是不值得的。

我也会推荐Brock Allen的博客 。 这是相当硬的,但他知道他的东西,并将经常解释许多微软认证技术的内部。

我建议你尝试阅读“OWIN认证中间件”。 这就是它的全部,尤其是ASP.Net vNext。 可悲的是,大多数文档都集中在如何使用它(它是 – 用于演示),但缺乏关于它如何真正起作用的任何深入信息,这可能非常令人沮丧。

为了掌握令牌和不同标准的工作原理,我建议你在这里观看这个video: http : //www.ndcvideos.com/#/app/video/2651

然后看看Azure Mobile Services,它甚至还有用于处理我认为的auth或ThinkTecture Identity Server的客户端库。 即使你最终没有使用IdSrv,通过他们的如何使用它的教程,你将学到很多关于整个事情如何工作的非常多的东西; 这一切都基于开放标准。 文档: http : //identityserver.github.io/Documentation/docs/尝试完成他们的教程; 他们使用Windows控制台应用程序代替应用程序,但概念是相同的。

祝你好运,但我想结束说, 不要只是一起破解似乎有用的东西。 Web安全性越来越复杂,很容易在代码中留下漏洞 – 我从经验谈起:)

不要成为Moonpig。

取决于您使用的版本。 MVC5 Web API 2实现了一种称为承载令牌的方法。 因此,您基本上可以在https:// applicationhostlocation / token端点前面使用用户名和密码执行post。 这将在有效负载中返回承载令牌。 您可以使用标头中的承载令牌将后续https请求发送到授权的Web api方法。 这是开箱即用的最新版本的web api。 这个链接很好地概述了这个方法: http : //www.asp.net/web-api/overview/security/individual-accounts-in-web-api

定制会员提供商我的朋友!

https://codeutil.wordpress.com/2013/05/14/forms-authentication-in-asp-net-mvc-4/

使用自定义成员资格提供程序您可以设置授权Cookie令牌(也称为AuthCookie),并在应用程序中使用表单身份validation技术。 使用自定义成员资格提供程序,您将能够创建访问DataBase以匹配用户凭据的自定义validation方法。

使用AuthCookie,每个后续请求都将进行身份validation,就像传统的授权Cookie技术一样。

此外,您可以使用重写Url方法强制用户重定向到SSL页面: 在asp.net中强制https用于整个站点的最佳方式?