如何在从javascript传递到web api 2时隐藏或保护令牌

时间:2015-03-20 13:03:46

标签: javascript c# angularjs asp.net-web-api token

我在UI网站/项目和Web API 2以及其他网站/项目上使用javascript(angularjs)

UI项目:localhost / 12345
Web API:localhost / 98777

UI项目正在调用Web API(C#)项目,将令牌从UI传递到WebAPI以获取CRUD请求。

  

我在ServerSide项目中生成了令牌 - WEB API2(localhost / 98777),1-用户名/密码   2-然后网址 localhost:/ 98777 / Token ,传递用户名+密码+令牌

     

以这种方式,如果你在fiddler中调用它,它会返回一个标记:content-type:   应用程序/ x-WWW窗体-urlencoded。像这样生成令牌并将其写入localDB,稍后可以在您的UI应用程序中使用此生成的令牌,使用javascript(ajax / angular)调用传递给WebAPI项目。

我已经实现了在我的客户端站点中调用GET / POST / PUT方法的承载令牌。

localhost/12345 defined in Client site to get employee records via token:
----------------------------------------------
method: 'GET'
contenttype: 'application/json, charset=utf-8',
authorization: "Bearer 040jdU6ry....."
url: localhost/98777/api/employees/

这将返回所有员工的数据......它有效。

localhost/98777 defined in server site web.config:
---------------------------------
<httpProtocol>
 <customHEaders>
   <remove name="Access-Control-Allow-Origin" />
   <add name="Access-Control-Alllow-Origin" value ="*"/>
 <customHeaders>
</httpProtocol>

问题? 问题是人们可以在IE / Chrome / FF中执行并打开开发人员工具,并查看javascript的来源并查看令牌。 然后在Fiddler / composer中执行代码并添加记录:(。

那为什么我需要一个令牌呢?

有人可以建议我错过哪一部分吗?人们可以看到令牌是否正常?

此应用程序将在Intranet中使用并由开发人员使用,因此我需要最大限度地保护它...

2 个答案:

答案 0 :(得分:4)

  

人们可以看到令牌是否正常?

是的,这很正常。据我所知,令牌只包含身份信息,以及客户端无法修改的一些声明。这是唯一可以信赖的东西:身份。

服务器端,您必须检查(角色/权限/业务规则)与令牌身份对应的用户是否有权执行请求的操作。

永远不要依赖客户端UI的业务规则实施。始终仔细检查服务器端,您将是安全的。

答案 1 :(得分:0)

您可以考虑以下步骤,

  1. 拥有公钥
  2. 使用时间戳
  3. 加密密钥
  4. 使用标题
  5. 中的时间戳发送加密密钥
  6. 使用相同的时间戳
  7. 加密API中的密钥
  8. 比较两个键。
  9. 使用系统时间检查时间戳。