Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有自定义身份验证的ASP.NET Web API_C#_Asp.net_Asp.net Web Api - Fatal编程技术网

C# 具有自定义身份验证的ASP.NET Web API

C# 具有自定义身份验证的ASP.NET Web API,c#,asp.net,asp.net-web-api,C#,Asp.net,Asp.net Web Api,我正在寻找帮助创建一个自定义用户名/密码身份验证的Web API 我有自己的数据库来验证用户,我不想使用windows身份验证 我希望能够用[Authorize]这样的属性来修饰我的web api调用,这样在不登录的情况下进行的调用就会失败 我不希望必须将凭据作为参数传递给每个方法 此API将主要由使用Xamarin PCL的移动设备使用 web API必须使用SSL 这似乎是一个简单的设置,但我的谷歌搜索并没有显示任何超级有用的点击 理想情况下,我需要一个登录控制器来授权用户,并允许随后的方法

我正在寻找帮助创建一个自定义用户名/密码身份验证的Web API

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

我希望能够用
[Authorize]
这样的属性来修饰我的web api调用,这样在不登录的情况下进行的调用就会失败

我不希望必须将凭据作为参数传递给每个方法

此API将主要由使用Xamarin PCL的移动设备使用

web API必须使用SSL

这似乎是一个简单的设置,但我的谷歌搜索并没有显示任何超级有用的点击

理想情况下,我需要一个登录控制器来授权用户,并允许随后的方法调用


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

取决于您使用的版本。MVC5WebAPI 2实现了一种称为承载令牌的方法。因此,您基本上是在端点前使用用户名和密码执行post。这将返回有效负载中的承载令牌。您向您的授权web api方法发送后续https请求,并在头中使用承载令牌。这是最新版本的web api的开箱即用。这个链接很好地概括了这个方法:

自定义会员资格提供商我的朋友

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

使用AuthCookie,每个后续请求都将被验证,就像传统的授权Cookie技术一样


此外,您还可以使用重写Url的方法强制用户重定向到SSL页面:

这是一个重要的主题,您可能需要花一些时间学习基本知识,抱歉

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

如果您需要从网站以外的其他地方调用api,那么cookie是很痛苦的。还请注意,在使用cookie和Web api时,您需要了解并防范一些微妙的CSRF漏洞

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

资源
你问过从哪里开始阅读的建议。由于微软在过去几年中多次改变其“默认”方法,您的任务变得复杂。当前的默认方法是替换以前的MembershipProvider(很好地摆脱)。如果你是新手,老实说,我建议你走这条路——你可以扩展它,它可以很好地与堆栈的大多数其他部分结合起来。是的,您失去了一些灵活性,您需要将其包装到当前用户商店中。但是你需要问问自己,你从盒子里拿出来的安全感是否不值得

我也会推荐。这是一个非常核心的问题,但他知道自己的东西,并且经常会解释很多微软认证技术的内在原理

我建议您尝试阅读“OWIN身份验证中间件”。这就是它的发展方向,尤其是ASP.NETVNEXT。遗憾的是,大多数文档都关注它的易用性(对于演示来说也是如此),但缺乏关于它实际工作原理的深入信息,这可能会让人非常沮丧

为了掌握令牌和不同标准的工作原理,我建议您在这里观看以下视频:


然后看看Azure移动服务,它甚至有客户端库来处理auth I Truse或ThinkTecture Identity Server。即使你最终没有使用IdSrv,通过阅读他们关于如何使用IdSrv的教程,你也会学到很多关于这整件事的基本原理;这一切都基于开放标准。此处的文档: 试着完成他们的教程;他们使用windows控制台应用程序代替应用程序,但概念相同

我祝你好运,但最后想说的是,请不要只是拼凑一些似乎有用的东西。网络安全越来越复杂,很容易在代码中留下漏洞——我是根据经验说的:)


别做月亮猪

这是供移动设备使用的。如果移动设备指的是移动设备上的应用程序,而不仅仅是移动浏览器上的网站,那么您需要oAuth代币或@Noel提到的承载代币之类的东西。。。请查看IdentityServer。或者,如果你在Azure上托管,他们在移动服务中加入了身份验证——但我从未使用过它,所以不确定它是否能满足你的需要。或者考虑让用户只使用谷歌/脸谱网/ Twitter登录。社交网络登录不是一种选择。这是针对移动应用的,是的,请查看Azure移动服务或ThinkTecture Identity Server。即使您最终没有使用IdSrv,通过阅读他们关于如何使用它的教程,您也可以