ASP.NET Web API 自定义身份验证
ASP.NET Web API with custom authentication
我正在寻求帮助创建具有自定义 username/password 身份验证的 Web API。
我有自己的数据库来验证用户,我不想使用 windows 身份验证。
我希望能够使用类似 [Authorize]
的属性来装饰我的网络 api 调用,以便在未登录的情况下进行的调用将失败。
我不想将凭据作为参数传递给每个方法。
此 API 将主要由使用 Xamarin PCL 的移动设备使用。
网络 API 必须使用 SSL。
这似乎是一个简单的设置,但我的谷歌搜索没有显示任何超级有用的点击。
理想情况下,我想要一个登录控制器来授权用户并允许后续方法调用。
谁能提供一个基本示例或一些好的读物 material?
取决于您使用的版本。 MVC5 Web API 2 实现了一种称为不记名令牌的方法。所以你基本上在你的 https://applicationhostlocation/token endpoint. This will return a bearer token in the payload. You send subsequent https requests to your authorized web api methods with the bearer token in a header. This is all out of the box with the latest version of the web api. This link outlines the approach pretty well: http://www.asp.net/web-api/overview/security/individual-accounts-in-web-api
之前执行一个带有用户名和密码的 post
自定义会员提供商我的朋友!
https://codeutil.wordpress.com/2013/05/14/forms-authentication-in-asp-net-mvc-4/
使用自定义会员提供程序您可以设置授权 Cookie 令牌(又名 AuthCookie),并在您的应用程序中使用表单身份验证技术。使用自定义成员资格提供程序,您将能够创建访问您的数据库以匹配用户凭据的自定义验证方法。
使用 AuthCookie,每个后续请求都将被验证,就像传统的授权 Cookie 技术一样。
此外,您可以使用重写 Url 方法来强制将用户重定向到 SSL 页面:
这是一个很大的主题,您可能需要花一些时间来学习基础知识,抱歉。
也就是说……
为了对后续方法调用进行身份验证,您需要可以随每个请求传回的内容。如果您从网站调用您的 api,比如说因为您使用的是 Angular 或类似的,那么一个简单的 cookie(适当加密和 MACed)将起作用。具体如何实现取决于您是否使用 OWIN 以及您的项目中是否也有 MVC 来为您的页面提供服务。不要自己创建 cookie,使用 FormsAuthentication 或等效的 OWIN 中间件。
您不需要使用 Microsoft 的会员资格或身份,但请注意,自己处理密码并非易事,您确实需要知道自己在用这些东西做什么——如果您愿意,没有什么可以替代大量研究要做到这一点。
如果您需要从 Web 站点以外的其他地方调用 api,那么 cookie 是很痛苦的。另请注意,在使用 cookie 和 Web api 时存在一些微妙的 CSRF 漏洞,您需要了解并防范这些漏洞。
cookie 的替代方法是嵌入 ThinkTecture Identityserver(免费)之类的东西,并使用它来发布 oAuth 令牌,然后将它们附加到每个 API 请求。它有很多优点,但也更复杂。
资源
您确实询问了从哪里开始阅读的指示。由于 Microsoft 在过去几年中多次更改其 "default" 方法,因此您的任务变得复杂。当前的默认方法是 Identity ,它取代了以前的 MembershipProvider (很好的摆脱)。如果您是新手,老实说,我建议您走那条路——您可以扩展它,它可以很好地与堆栈的其余部分联系在一起。是的,你失去了一些灵活性,你需要将它包装在你当前的用户存储中。但是您需要问问自己,开箱即用的安全性是否不值得。
我也推荐 Brock Allen's blog。它非常硬核,但他知道他的东西,并且会经常解释许多 Microsoft 身份验证技术的内部结构。
我建议您尝试阅读 "OWIN Authentication Middleware"。这就是一切的方向,尤其是 ASP.Net vNext。可悲的是,那里的大部分文档都侧重于它是多么容易使用(而且它是 - 对于演示),但缺乏关于它如何真正工作的任何深入信息,这可能会非常令人沮丧。
为了掌握令牌和不同标准的工作原理,我建议您在此处观看此视频:http://www.ndcvideos.com/#/app/video/2651
然后看看 Azure 移动服务,它甚至有客户端库来处理我认为的身份验证或 ThinkTecture Identity Server。即使您最终 没有 使用 IdSrv,通过阅读他们关于如何使用它的教程,您也会学到很多关于整个事情的一般工作原理;这一切都基于开放标准。此处的文档:http://identityserver.github.io/Documentation/docs/
尝试完成他们的教程;他们使用 windows 控制台应用程序代替应用程序,但概念是相同的。
祝你好运,但我想在结束时说 请 不要只是拼凑一些看起来有用的东西。 Web 安全性越来越复杂,很容易在您的代码中留下漏洞 - 我的经验之谈 :)
别当月猪。
我正在寻求帮助创建具有自定义 username/password 身份验证的 Web API。
我有自己的数据库来验证用户,我不想使用 windows 身份验证。
我希望能够使用类似 [Authorize]
的属性来装饰我的网络 api 调用,以便在未登录的情况下进行的调用将失败。
我不想将凭据作为参数传递给每个方法。
此 API 将主要由使用 Xamarin PCL 的移动设备使用。
网络 API 必须使用 SSL。
这似乎是一个简单的设置,但我的谷歌搜索没有显示任何超级有用的点击。
理想情况下,我想要一个登录控制器来授权用户并允许后续方法调用。
谁能提供一个基本示例或一些好的读物 material?
取决于您使用的版本。 MVC5 Web API 2 实现了一种称为不记名令牌的方法。所以你基本上在你的 https://applicationhostlocation/token endpoint. This will return a bearer token in the payload. You send subsequent https requests to your authorized web api methods with the bearer token in a header. This is all out of the box with the latest version of the web api. This link outlines the approach pretty well: http://www.asp.net/web-api/overview/security/individual-accounts-in-web-api
之前执行一个带有用户名和密码的 post自定义会员提供商我的朋友!
https://codeutil.wordpress.com/2013/05/14/forms-authentication-in-asp-net-mvc-4/
使用自定义会员提供程序您可以设置授权 Cookie 令牌(又名 AuthCookie),并在您的应用程序中使用表单身份验证技术。使用自定义成员资格提供程序,您将能够创建访问您的数据库以匹配用户凭据的自定义验证方法。
使用 AuthCookie,每个后续请求都将被验证,就像传统的授权 Cookie 技术一样。
此外,您可以使用重写 Url 方法来强制将用户重定向到 SSL 页面:
这是一个很大的主题,您可能需要花一些时间来学习基础知识,抱歉。
也就是说…… 为了对后续方法调用进行身份验证,您需要可以随每个请求传回的内容。如果您从网站调用您的 api,比如说因为您使用的是 Angular 或类似的,那么一个简单的 cookie(适当加密和 MACed)将起作用。具体如何实现取决于您是否使用 OWIN 以及您的项目中是否也有 MVC 来为您的页面提供服务。不要自己创建 cookie,使用 FormsAuthentication 或等效的 OWIN 中间件。 您不需要使用 Microsoft 的会员资格或身份,但请注意,自己处理密码并非易事,您确实需要知道自己在用这些东西做什么——如果您愿意,没有什么可以替代大量研究要做到这一点。
如果您需要从 Web 站点以外的其他地方调用 api,那么 cookie 是很痛苦的。另请注意,在使用 cookie 和 Web api 时存在一些微妙的 CSRF 漏洞,您需要了解并防范这些漏洞。
cookie 的替代方法是嵌入 ThinkTecture Identityserver(免费)之类的东西,并使用它来发布 oAuth 令牌,然后将它们附加到每个 API 请求。它有很多优点,但也更复杂。
资源
您确实询问了从哪里开始阅读的指示。由于 Microsoft 在过去几年中多次更改其 "default" 方法,因此您的任务变得复杂。当前的默认方法是 Identity ,它取代了以前的 MembershipProvider (很好的摆脱)。如果您是新手,老实说,我建议您走那条路——您可以扩展它,它可以很好地与堆栈的其余部分联系在一起。是的,你失去了一些灵活性,你需要将它包装在你当前的用户存储中。但是您需要问问自己,开箱即用的安全性是否不值得。
我也推荐 Brock Allen's blog。它非常硬核,但他知道他的东西,并且会经常解释许多 Microsoft 身份验证技术的内部结构。
我建议您尝试阅读 "OWIN Authentication Middleware"。这就是一切的方向,尤其是 ASP.Net vNext。可悲的是,那里的大部分文档都侧重于它是多么容易使用(而且它是 - 对于演示),但缺乏关于它如何真正工作的任何深入信息,这可能会非常令人沮丧。
为了掌握令牌和不同标准的工作原理,我建议您在此处观看此视频:http://www.ndcvideos.com/#/app/video/2651
然后看看 Azure 移动服务,它甚至有客户端库来处理我认为的身份验证或 ThinkTecture Identity Server。即使您最终 没有 使用 IdSrv,通过阅读他们关于如何使用它的教程,您也会学到很多关于整个事情的一般工作原理;这一切都基于开放标准。此处的文档:http://identityserver.github.io/Documentation/docs/ 尝试完成他们的教程;他们使用 windows 控制台应用程序代替应用程序,但概念是相同的。
祝你好运,但我想在结束时说 请 不要只是拼凑一些看起来有用的东西。 Web 安全性越来越复杂,很容易在您的代码中留下漏洞 - 我的经验之谈 :)
别当月猪。