验证ASP.NET Web API

Ada*_*itt 20 c# authorization asp.net-web-api

我已经创建了一个新的ASP.NET Web API,但事情进展顺利.我现在正处于我想保护API的地步.

我将[Authorize]属性放在我的基本控制器上面,如果我想在ASP.NET应用程序本身内进行API调用,它就能正常工作.

但是,我想知道,对于想要进行API调用并通过授权的外部客户端,最佳做法是什么?另外,请记住我有自定义身份验证逻辑.

客户端应该如何发送凭据?我在什么时候处理这​​些凭证?

Jos*_*nke 21

我应该如何发送客户端凭据?

发送身份验证信息的默认位置是授权标头.您可以将其用于基本身份验证,也可以用于其他类型的身份验证(JWT,承载等).

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Run Code Online (Sandbox Code Playgroud)

例如,要为您的请求添加基本身份验证标头,您可以在客户端上使用以下代码:

WebRequest request = (HttpWebRequest)WebRequest.Create("https://yoururl");
request.Headers.Add(HttpRequestHeader.Authorization, "Basic " + Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes("user:password")));
Run Code Online (Sandbox Code Playgroud)

我在什么时候处理这​​些凭证?

我会写一个DelegatingHandler并用它来解决你的"委托人".然后,您可以将其设置HttpContext.CurrentPrincipal为在请求范围内的任何位置使其可用.在DelegatingHandler你的控制器之前被称为你可以在下面的图片,这使得它非常适合认证逻辑中看到的.

在此输入图像描述

我会在客户端上执行相同操作(写入DelegatingHandlerActionFilterAttribute)以在默认位置添加身份验证标头.请注意,DelegatingHandlers是HTTP管道的一部分,ActionFilterAttribute属于MVC管道.

最后但并非最不重要的是,我建议不要编写自己的自定义身份验证逻辑,但坚持使用默认框架.这可以像使用HTTPS上的基本身份验证一样简单,也可以像实现OAuth一样复杂.但我会远离自己做的解决方案.

我还想邀请你看看我给同一个问题的答案.

注意: ASP.NET Web Api是基于REST的,因此您根本不想保留会话信息.

编辑:有关如何实现处理基本身份验证的委托处理程序的示例,请参阅:使用消息处理程序在asp.net web api中进行基本http身份验证.