2

在花了几个月的时间试图解决这个问题之后,我终于不得不寻求你的帮助。

场景:Ajax 调用传递用户名和密码的 webapi 方法。如果用户有效,则将会话 ID/令牌返回给客户端。该令牌将在所有后续请求中传递;也许使用时间戳来进一步保护方法。

我理解这个理论,我需要的是示例代码。带有用户名和密码字段的 HTML 页面。“登录”按钮单击对 asp.net WebAPI 中的 rest 方法进行 Ajax 调用,以针对自定义成员表进行身份验证。

如果一切正常,将令牌发送到客户端(将存储在用户设备上)

任何指导将不胜感激。

4

1 回答 1

3

鉴于您正在为用户名和密码打开一个端点,您应该阅读4.4.3下描述的一些威胁。资源所有者密码凭据(使用用户名和密码的 OAuth2 流程)- 即使这不是 OAuth 解决方案,遵循该建议仍然非常重要,这涵盖了诸如使用 SSL 进行传输级别安全性等基础知识,但它也列出了很多其他威胁和对策...

在 JavaScript 中使用用户的凭据本身就是一种威胁。OAuth 2 规范将隐式授权流程描述为使用 JavaScript 获取会话 (access_token) 的首选方法,隐式流程旨在使凭证远离 javascript。这里有一个该方法的示例演练;但是,这将涉及您安装授权服务器、使用第 3 方提供程序或使用DotNetOpenAuth 之类的东西实现自己的授权服务器(这里的一些好场景并不太难)。

但是假设您已经排除了 OAuth 2 和隐式授权流程等,那么......

我在这里放置了一个在线示例,它通过 AJAX 使用基本身份验证返回 Json Web 令牌JWT会话令牌,以用于所有后续请求。

我的示例是基本的,因此令牌存储在内存中;但是,cookie、本地存储等可用于在 Web 环境中更长时间地存储令牌。

我的示例使用 Thinktecture 的IdentityModel包。

下面还有其他示例和详细的演练,这些绝对应该用作进一步的参考和指导......

我的例子借鉴了上面和这个问题How to use Basic Auth with jQuery and AJAX?

如果您的登录表单和 API 位于不同的域中,那么您还需要调查CORS或 JSONP,确保在服务器上使用安全存储并隐藏在服务器上的会话签名密钥。该密钥当前在 WebApiConfig.cs 中进行了硬编码,还请务必重新启用必须通过 SSL 选项。

一旦是PhoneGap

您的服务器可能是相同的,但您可以使用 PhoneGap 框架来替换您的一些 JavaScript...

于 2013-02-23T11:27:54.740 回答