web api中的基本身份验证

Uts*_*sav 18 authentication basic-authentication asp.net-web-api

我开始研究Web Api,只想创建一个简单的基本身份验证.我想知道怎么做?

我尝试使用给定的MSDN链接,但在MSDN上没有给出逐步教程. http://www.asp.net/web-api/overview/security/basic-authentication

Rob*_*rch 34

您提供的链接提供了您需要的大部分细节,我希望这填补了空白.

注意:如果使用Web.API 2,Microsoft建议使用身份验证过滤器的不同方法.

在您的服务器上设置https

如果您需要真正的安全性,这一点非常重要,否则可以通过窥探方收集密码.如何执行此操作完全取决于您的设置,您没有详细说明,但如果您正在使用Azure WebRole,那么从Microsoft 设置SSL是一个非常好的分步指南.

这不是后续步骤所必需的,但应在您发布代码之前完成.我首先提到它是因为这部分通常涉及让其他人参与(服务器配置的系统管理员,购买证书的财务等),并且给他们很多警告是很好的.

编写(或窃取)自定义IHttpModule来进行身份验证

这是链接中C#代码的一大块- 它解析浏览器发送的值并将HttpContext.Current.User设置为经过身份验证的用户.只需将肉类复制并粘贴到您自己的应用程序中的类中,我们稍后再回过头来.您需要在代码中使用以下using语句.

using System; using System.Net.Http.Headers; using System.Security.Principal;
using System.Text; using System.Threading; using System.Web;
Run Code Online (Sandbox Code Playgroud)

将该模块与您的应用程序相关联

将新模块添加到web.config文件中(注意system.webServer可能已存在)

<system.webServer>
  <modules>
    <add name="BasicAuth" type="Full.ClassName.Path.BasicAuth, Assembly.Name"/>
  </modules>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

限制访问您网站的相关部分

您可以通过在操作定义之前添加[Authorize]属性来阻止特定操作.通过在控制器类之前添加控制器来阻止整个控制器.

[Authorize] // Restricts access to whole controller    
public class StockController : ApiController {
    [Authorize] // Restricts access to this action - not necessary if whole controller restricted.
    public IEnumerable<StockLevel> Get() {
Run Code Online (Sandbox Code Playgroud)

或者在您的App_Start\WebApiConfig.cs文件中,您可以添加config.Filters.Add(new AuthorizeAttribute());它,它将锁定所有内容.

需要注意的事项 - System.Web.Mvc.AuthorizeAttribute如果你有这个命名空间,你也可以得到令人困惑的结果.

此时你可以尝试一下 - 用户:"用户",传递:"密码".

自定义用户验证

回到我们从链接中窃取的类,您将看到以下代码块:

// TODO: Here is where you would validate the username and password.
private static bool CheckPassword(string username, string password)
Run Code Online (Sandbox Code Playgroud)

如果用户名和密码有效,请将此项返回true.如果你自己动手,你可能想调查bcrypt(你相信你从网上下载的实现吗?),PBKDF2Crypto类(简单但不是非常安全)但是微软可能有更好的东西,因为有很多东西关于正确存储密码的担忧.

  • 这么棒的写作!我见过的更好的回应之一,真的帮助我了解了更多关于BasicAuth以及如何按照我需要的方式设置它.谢谢! (3认同)
  • Crypto类只进行了1000次迭代,这是2000年发布的[RFC](http://www.ietf.org/rfc/rfc2898.txt)中建议的最小数量,AFAIK它不允许你改变该值(您引用的代码将其作为const).阅读,你会发现自2000年以来每年都要加倍的建议 - 但它确实应该调整到你的部署硬件,因为它是易于攻击和对用户的影响之间的权衡.有关详细信息,请参阅此问题:http://security.stackexchange.com/questions/3959/recommended-of-iterations-when-using-pkbdf2-sha256 (2认同)