3

过去一周我在 SO 和阅读有关身份验证的书籍中度过,并开始为我的 WebAPI 推出基本身份验证,以便 HTML客户端可以让用户登录/注册/注销,但基本身份验证不利于注销,所以我'米回到广场一。

细节:

  1. 我不需要让用户使用其他服务登录。我不需要 facebook 或 google 登录。只是一个用户名/密码。

  2. 我需要用户能够从客户端应用程序(而不是浏览器)登录/注销/注册。

  3. 我不介意通过网络发送凭据,因为我将使用 SSL。

  4. 目前只有一个客户端,但会有其他客户端访问 API,所以我将来需要实现类似于 api 密钥的东西。也许这是一个单独的问题。

  5. 我有一个 RESTish WebAPI,它接受/返回 JSON 给其他域中的 html/js 客户端。

  6. 这是用于原型设计的,所以我不需要最好的解决方案,只需要对预发布足够好并且实现时间短的东西。

我应该从哪里开始?你会怎么做,为什么?表单身份验证是一种选择吗?

4

2 回答 2

2

在你的问题中

我不介意通过网络发送凭据,因为我将使用 SSL。

在对您所说的答案的评论中

我只是不希望用户通过网络发送明文密码。

不确定您到底在寻找什么,但表单身份验证绝对是一种选择。您也可以使用基本身份验证,但它有您提到的一些缺点:没有注销等。您必须使用带有基本身份验证的 HTTPS。

如果浏览器弹出是主要问题,您可以通过在第一个请求中抢先发送凭据来解决这个问题。通常,第一个请求没有 Authorization 请求标头。服务以 401 响应并发回指示基本方案的 WWW-Authenticate 响应头。这是浏览器弹出对话框并询问用户ID和密码,将其打包在基本方案中并发送授权标头的时候。

于 2013-04-13T02:52:27.640 回答
0

首先,更重要的是;SSL, SSL SSL 这是一个非常简单的步骤,即使是主要网站都错过了,但它非常重要(即使 SSL 存在许多当前难以利用的缺陷)。

您可以使用 webapi 进行几乎任何类型的身份验证;基本身份验证;证书; 你可以看看使用 OAUTH 风格的身份验证(注意我说的是风格,因为规范的定义很松散,它提供了几乎每一个选项和多种实现方式)。

首先,我将 WebApi 视为一种选择;你考虑过别的吗?例如http://www.servicestack.net/它包含一系列的身份验证适配器https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization

其次,了解您的身份验证内容及其身份验证内容(私人数据/上传/访问某些内容)会很有帮助;为了得到一个包含“足够安全”的答案。

“可以”使用表单身份验证,并且假设您的客户端不是基于浏览器的,您可以通过服务返回登录名并使用您需要在使用期间保留在某种上下文中的表单身份验证令牌进行响应来实现此目的;假设一旦软件完成使用 api 就设置了超时,那么用户下次必须再次登录才能重用它。


就 web api / JS-Html 前端而言;引用我自己的话。

作为一个 JS 应用程序,它可能值得快速浏览一下与 JS 相关的 owasp 前 10 名

http://erlend.oftedal.no/blog/?blogid=125

A1 - Injection
A2 - Cross Site Scripting (XSS)
A3 - Broken Authentication and Session Management
A4 - Insecure Direct Object References
A5 - Cross Site Request Forgery (CSRF)
A6 - Security Misconfiguration
A7 - Insecure Cryptographic Storage
A8 - Failure to Restrict URL Access
A9 - Insufficient Transport Layer Protection
A10 - Unvalidated Redirects and Forwards

这里有一篇关于为 WebApi 创建自定义授权过滤器的好帖子http://www.west-wind.com/weblog/posts/2013/Apr/18/A-WebAPI-Basic-Authentication-Authorization-Filter (how-to /带代码)

于 2013-04-12T20:55:07.890 回答