通过调用web api登录HTML客户端

时间:2013-02-23 00:04:00

标签: jquery html asp.net-web-api

在花了几个月试图解决这个问题后,我终于要求你的帮助。

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

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

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

任何指导都将不胜感激。

1 个答案:

答案 0 :(得分:3)

鉴于您正在打开用户名和密码的端点,您应该阅读here下的4.4.3. Resource Owner Password Credentials所描述的一些威胁(使用用户名和密码的OAuth2流) - 建议仍然非常即使这不是OAuth解决方案也很重要,这包括基本知识,例如使用SSL进行传输级安全性,但它也列出了许多其他威胁和对策......

在JavaScript中使用用户的凭据本身就是一种威胁。 OAuth 2规范将隐式授权流描述为使用JavaScript获取会话(access_token)的首选方法,隐式流旨在使凭证远离javascript。这种方法有here的示例;但是,这将涉及您使用第三方提供商安装授权服务器或使用DotNetOpenAuth之类的方式实现您自己的服务(这不是一些好的方案here)。

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

我已经在线here放置了一个示例,它通过AJAX使用Basic auth返回一个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 ......