我正在使用VS2013和Web API 2使用令牌身份验证通过SSL创建自托管(使用OWIN),RESTful服务.虽然我不是新手开发人员,但这是我第一次看到ASP.NET技术,所以请记住这一点.
除了身份验证和授权部分之外,我已经或多或少地工作了.我完全理解对用户(谁是这个用户?)进行身份验证和授权已经过身份验证的用户访问资源(该用户是否可以访问此特定资源?)的区别.
我的auth过程的一个非常简单的概述如下(为简洁起见做了一些假设):
未知客户端连接到API,例如GET api/values.
服务器响应401和此响应标头:"WWW-Authenticate:Token".
看到这个后,未知客户端知道在这里连接到不同的API端点:POST api/auth(路由到Login功能),提供用户名和密码.
服务器将尝试确定这是否是有效用户,并且可以接受或拒绝用户,具体取决于凭据的有效性.
(已拒绝)服务器返回错误状态代码(403?).流程结束.
(已接受)服务器创建随机令牌(例如GUID)并将其存储在用户记录中.然后它将令牌发送给客户端.
现在经过身份验证的客户端重新连接到API,GET api/values,这次也提供令牌.
用户将资源数据返回给客户端.
...
用户可以通过连接到用于登录的相同API来注销:POST api/auth(这次,他的请求将被路由到Logout功能).这将从服务器中删除令牌,客户端也必须删除自己的令牌.
正如您所看到的,这是一个相对简单的过程,但我找不到任何具体而简单的示例来了解如何使用自托管Web API 2实现此目标.
我不需要注册用户或进行任何密码/角色管理等,也没有外部认证.所有有效用户都拥有访问资源的相同权限,并且他们已经在系统中通过我无法控制的单独进程创建(我只能读取他们的凭据进行验证).我发现的大多数示例都是讨论我不需要的安全框架,所以我排除了以下任何一种:基本身份验证,Windows身份验证,表单身份验证,个人帐户,ASP.NET成员身份/身份,OAuth,Thinktecture或任何其他安全框架.
我已经阅读了有关在消息处理程序中进行身份验证的文章以及其他有关在自定义Authorize属性过滤器中进行身份验证的文章,而其他人甚至建议我应该使用新的(在Web API 2中)IAuthenticateFilter属性.这非常令人困惑.您能否以一种非常简单的方式来建议我的目标?任何特定的代码示例都将非常受欢迎,即使它们只是骨架实现或伪代码.我只需要一些想法让我开始.