在过去的几周里,我一直在阅读有关身份验证以及通过 RESTful 服务(更具体地说是 asp.net Web api)保护和验证用户的不同方法的任何内容。这真的是我第一次深入研究 http 身份验证,我读的越多,我就越困惑。
让我详细介绍一下我的项目的应用程序基础架构......
我正在构建一个 RESTful 服务,它将作为 Web 应用程序的数据访问层。应用程序本身几乎是一个基于 AngularJS 构建的 SPA。用户登录和 CRUD 操作都将通过 API 处理,并通过 http 而非 HTTPS 完成。
我已经阅读了很多不同的文章/示例,我认为我有一个对我的目标有意义的方向。我希望我的方法类似于 Amazon Web Services 进行身份验证的方式,并且在 The Buzz Media 上有一篇很棒的文章专门描述了他们如何在高级别进行身份验证。我还发现了一个与文章中的高级描述非常相似的示例(特别是服务器代码部分)。
但是有一些事情让我很困惑......
- 当用户通过客户端(在我的例子中是 Angular)登录时,客户端将使用用户密码创建一个哈希。哈希将包含 apikey,以及只有 api 和客户端知道的秘密。客户端登录时如何获取秘钥?似乎首先必须在登录之前发出请求以获取秘密,然后创建哈希并发送另一个请求来验证用户?一个代码示例将非常有帮助。
- 我会使用 DelegatingHandler 还是创建一个自定义的 Attrubite 来装饰每个控制器?为什么?
- 一旦用户被认为已通过身份验证,我将创建一个随机数,该随机数将存储在该用户的数据库中并在响应中返回。客户端将在他们的下一个请求中使用这个随机数。在上面的服务器代码示例链接中,生成了 nonce,但永远不会发送回客户端。该示例使用自定义属性,但我对如何在响应中将随机数返回给客户端感到困惑?同样,一个代码示例将非常有帮助。
- 从那里开始,只是客户端对每个请求的 apikey、nonce 和数据进行哈希处理,而 API 服务在响应中发送回一个新的 nonce?我错过了什么吗?