ASP.NET Web API with custom authentication (使用自定义认证的ASP.NET Web API)

14 浏览
0 Comments

ASP.NET Web API with custom authentication (使用自定义认证的ASP.NET Web API)

我正在寻求帮助,创建一个带自定义用户名/密码认证的Web API。

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

我希望能够通过类似于[Authorize]的属性装饰我的Web API调用,以便未登录的调用将失败。

我不想在每个方法中将凭据作为参数传递。

这个API主要由使用Xamarin PCL的移动设备消耗。

Web API必须使用SSL。

这似乎是一个简单的设置,但我的谷歌搜索没有发现任何超级有用的结果。

理想情况下,我希望有一个登录控制器,该控制器授权用户并允许随后的方法调用通过。

有人能提供一个基本的示例或一些好的阅读材料吗?

admin 更改状态以发布 2023年5月23日
0
0 Comments

根据所使用的版本不同,MVC5 Web API 2 实现了一种称为令牌式访问的方法。所以你基本上需要在https://applicationhostlocation/token端点上执行带有用户名和密码的提交。这将在有效载荷中返回一个令牌。您可以在头部带上令牌,发送后续的https请求到授权的Web API方法。这是最新版Web API的一个开箱即用的功能。这个链接很好地概述了这种方法:http://www.asp.net/web-api/overview/security/individual-accounts-in-web-api

0
0 Comments

这是一个很大的主题,你可能需要花些时间来学习基础知识,抱歉。

话虽如此…
为了使后续方法调用得到认证,你需要有东西能够在每个请求中传递。如果你从网站中调用你的API,比如你使用Angular或类似工具,那么简单的cookie(经过适当的加密和MAC处理)就可以解决问题。如何实现这一点取决于你是否使用OWIN,并且是否在项目中使用MVC来提供页面。不要自己创建cookie,使用FormsAuthentication或OWIN中间件的等效方法。
你不需要使用Microsoft的Membership或Identity,但是要知道自己处理密码并不容易,你真的需要了解这方面的东西,如果想要做好的话,研究很重要。

如果你需要从非网站中调用API,则cookie有些繁琐。另外要注意,在使用cookie和Web API时存在一些微妙的CSRF漏洞,需要理解和防范。

另一种cookie的替代方案是嵌入类似ThinkTecture Identityserver(它是免费的)的东西,并使用它发出oAuth令牌,然后将它们附加到每个API请求中。它有很多优点,但也更加复杂。

资源
你确实要求我指出开始阅读的指针。微软在过去几年中已经多次更改了它的“默认”方法,这使得你的任务变得复杂。目前的默认方法是Identity,它取代了以前的MembershipProvider(好吧,我们不再需要它了)。如果你是新手,我建议你使用这个方法——你可以扩展它,并且它与大多数其他堆栈非常良好地结合。是的,你会失去一些灵活性,你需要围绕你当前的用户存储对它进行包装。但你需要问问自己,如果开箱即用的安全性不值得一试吗?

我还推荐Brock Allen的博客。它很硬核,但他知道自己在做什么,通常会解释Microsoft身份验证技术的内部工作原理。

我建议你尝试阅读“OWIN认证中间件”。这是它的未来方向,尤其是与ASP.Net vNext。不幸的是,大部分文档都只关注如何使用的超级容易(它确实如此——对于演示),但缺乏任何关于它的真正工作原理的深入信息,这可能非常令人沮丧。

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

然后看看Azure Mobile Services,它甚至有用于处理授权的客户端库,或者ThinkTecture Identity Server。即使你最终不使用IdSrv,通过完成有关如何使用它的教程,你也会对整个流程有很多了解;它都是基于开放标准的。文档可以参考这里:http://identityserver.github.io/Documentation/docs/尝试完成他们的教程;他们使用Windows控制台应用程序代替应用程序,但概念是相同的。

我祝你好运,但是我想要说的是,请不要简单地把一些东西拼凑在一起看起来能够工作。网络安全越来越复杂,很容易在你的代码中留下漏洞 - 我是从经验中说出来的。不要成为像Moonpig一样的人。

0