我正在使用VS2013和Web API 2使用令牌身份验证通过SSL创建自托管(使用OWIN),RESTful服务。虽然我不是新手开发人员,但这是我第一次看ASP.NET技术,所以请记住这一点。
除了身份验证和授权部分之外,我已经或多或少地工作了。我完全理解验证用户(谁是这个用户?)和授权已经过身份验证的用户访问资源的区别(该用户可以访问此特定资源吗?)。
我的auth过程的一个非常简单的概述如下(为简洁起见做了一些假设):
正如您所看到的,这是一个相对简单的过程,但我找不到任何具体而简单的示例来了解如何使用自托管Web API 2实现此目标。
我不需要注册用户或进行任何密码/角色管理等,也没有外部认证。所有有效用户都拥有访问资源的相同权限,并且他们已经在系统中通过我无法控制的单独进程创建(我只能读取他们的凭据进行验证)。我发现的大多数示例都是讨论我不需要的安全框架,所以我排除了以下任何一种:基本身份验证,Windows身份验证,表单身份验证,个人帐户,ASP.NET成员身份/身份,OAuth,Thinktecture或任何其他安全框架。
我已经阅读了有关在消息处理程序中进行身份验证的文章以及其他有关自定义Authorize属性过滤器中的身份验证的文章,而其他人甚至建议我应该使用新的(在Web API 2中)IAuthenticateFilter属性。这非常令人困惑。您能否以一种非常简单的方式来建议我的目标?任何特定的代码示例都将非常受欢迎,即使它们只是骨架实现或伪代码。我只需要一些想法让我开始。
答案 0 :(得分:9)
经过大量的谷歌搜索后,我在CodeProject上发现了这篇文章:http://www.codeproject.com/Articles/630986/Cross-Platform-Authentication-With-ASP-NET-Web-API。虽然这不是Web API 2或自托管,但它给了我一些关于如何继续的想法。
有人还发表了对引用NuGet包的CodeProject文章的评论,该文章可能会让任何寻找类似内容的人感兴趣:https://www.nuget.org/packages/WebApiTokenAuth。在我的情况下,它有点多。
最后,除了问题中提到的身份验证选项之外,如果使用OWIN进行自托管(根据官方的MS推荐),还可以选择编写OWIN中间件来进行身份验证。但是,我计划使用消息处理程序实现这种特殊形式的令牌认证,因为与编写OWIN中间件相比,这种方法的支持更多。