在我目前正在开发的应用程序中,我们使用 ASP.Net 表单身份验证来授予用户进一步访问该站点的权限。该站点面向移动用户,因此我们试图尽可能地脱离服务器,并利用 KnockoutJS 进行 Web 服务调用并加载数据,以便用户可以查看它。
现在 web 服务(使用 GET 方法的 REST 服务)需要用户名才能加载特定于该用户的数据。我在服务器端 (ASP.net) 上有这些信息,我可以轻松访问User.Identity.Name
或直接访问表单身份验证 cookie 并提取信息。
我的问题是我需要从服务器获取用户名到客户端,以便可以进行服务调用。我已经考虑过安全地执行此操作,但到目前为止还一片空白。目前,我将用户名作为 url 参数传递并使用 JavaScript 将其解析出来,并检查Page_Load
验证 url 中的用户名与登录用户匹配的方法。
我需要一种方法来安全地将用户名从 ASP.Net 传递到客户端 JavaScript,该用户已使用表单对用户进行了身份验证,以便我可以进行 REST Web 服务调用。
编辑:所以在谷歌搜索并与我的团队负责人会面后,我认为我们将使用类似于此示例的 OAuth 实现:
http://www.c-sharpcorner.com/UploadFile/surya_bg2000/secure-wcf-restful-service-using-oauth/
同样对于寻找相同答案的其他任何事情,我发现这个问题对理解 OAuth 非常有帮助:
如果 Nonce 只能使用一次,那么 OAuth 中的时间戳有什么意义?
假设一切都正确实施,是否会更安全(完全安全,安全,还是更不安全?)而不是通过 ASP 标签传递生成的签名,如下所述?
编辑2:经过更多的审查和更多的搜索,我们最终决定了一个框架和方法来完成这项工作。事实证明 OAuth 不一定是这里的答案,这个问题:
但说真的.... ASP.NET WebAPI 实现示例,包括 OAuth
在弄清楚如何进行这项工作方面也有很大帮助。我们最终要做的是生成签名并放入 javascript 并像这样进行调用。签名将是时间敏感的,并且每次用户加载页面时都会重新生成,非常像 OAuth,但我们没有实现完整的规范。
TL:DR最终解决方案是生成哈希签名并通过 ASP 服务器标记 <% aspvar_here %> 将其放在页面上,并使用它来验证服务调用