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你的控制器之前被称为你可以在下面的图片,这使得它非常适合认证逻辑中看到的.

我会在客户端上执行相同操作(写入DelegatingHandler或ActionFilterAttribute)以在默认位置添加身份验证标头.请注意,DelegatingHandlers是HTTP管道的一部分,ActionFilterAttribute属于MVC管道.
最后但并非最不重要的是,我建议不要编写自己的自定义身份验证逻辑,但坚持使用默认框架.这可以像使用HTTPS上的基本身份验证一样简单,也可以像实现OAuth一样复杂.但我会远离自己做的解决方案.
我还想邀请你看看我给同一个问题的答案.
注意: ASP.NET Web Api是基于REST的,因此您根本不想保留会话信息.
编辑:有关如何实现处理基本身份验证的委托处理程序的示例,请参阅:使用消息处理程序在asp.net web api中进行基本http身份验证.
| 归档时间: |
|
| 查看次数: |
26068 次 |
| 最近记录: |