validationASP.NET Web API
我已经创建了一个新的ASP.NET Web API,并且运行良好。 我现在正处于我想要保护API的地步。
我把[Authorize]属性放在我的基本控制器上面,如果我想在ASP.NET应用程序本身内进行API调用,它就能正常工作。
但是,我想知道,对于想要进行API调用并通过授权的外部客户端,最佳做法是什么? 另外,请记住我有自定义身份validation逻辑。
客户端应该如何发送凭据? 我在什么时候处理这些凭证?
我应该如何发送客户端凭据?
发送身份validation信息的默认位置是授权标头。 您可以将其用于基本身份validation,也可以用于其他类型的身份validation(JWT,承载等)。
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
例如,要为您的请求添加基本身份validation标头,您可以在客户端上使用以下代码:
WebRequest request = (HttpWebRequest)WebRequest.Create("https://yoururl"); request.Headers.Add(HttpRequestHeader.Authorization, "Basic " + Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes("user:password")));
我在什么时候处理这些凭证?
我会写一个DelegatingHandler
并用它来解决你的“委托人”。 然后,您可以将其设置为HttpContext.CurrentPrincipal
以使其在请求范围内的任何位置都可用。 在您的控制器之前调用DelegatingHandler
,如下图所示,这使其成为身份validation逻辑的理想选择。
我会在客户端上执行相同的操作(编写DelegatingHandler
或ActionFilterAttribute
)以在默认位置添加身份validation标头。 请注意, DelegatingHandler
是HTTP管道的一部分, ActionFilterAttribute
属于MVC管道。
最后但并非最不重要的是,我建议不要编写自己的自定义身份validation逻辑,但坚持使用默认框架。 这可以像使用HTTPS上的基本身份validation一样简单,也可以像实现OAuth一样复杂。 但我会远离自己做的解决方案。
我还想邀请你看看我给同一个问题的答案 。
注意: ASP.NET Web Api是基于REST的,因此您根本不想保留会话信息。
编辑:有关如何实现处理基本身份validation的委托处理程序的示例,请参阅: 使用消息处理程序在asp.net web api中进行基本http身份validation。
基本上,您需要将通过网络加密的用户名和密码发送到您的服务器应用程序,然后您可以让您的API生成随机会话ID并将其保存在列表(服务器端)中,并将ID发送回客户端。 现在,每次客户端向服务器发送内容时,请在数据包中包含他收到的ID,这样服务器每次都可以检查它。
在客户端断开连接或固定超时时,您可以从服务器列表中删除ID并要求客户端重新进行身份validation。
- 在ASP.NET Web Api中使用“ExceptionHandler”需要一个完整的示例来处理未处理的exception?
- ASP.NET WebAPI JSON绑定案例敏感性
- 我可以将基于接口的对象传递给MVC 4 WebApi POST吗?
- 在ASP.NET WebApi 2中自定义承载令牌JSON结果
- WebApi HttpClient不发送客户端证书
- 从.NET 2.0客户端调用Web Api服务
- asp.net mvc api return’此XML文件似乎没有与之关联的任何样式信息。 文档树如下所示。
- 通用存储库,CreateObjectSet ()方法
- Ninject Web Api“确保控制器具有无参数的公共构造函数。”