从javascript传递到web api 2时如何隐藏或保护令牌
Posted
技术标签:
【中文标题】从javascript传递到web api 2时如何隐藏或保护令牌【英文标题】:how to hide or secure the token when passing from javascript to web api 2 【发布时间】:2015-05-23 21:36:45 【问题描述】:我在 UI 站点/项目和 Web API 2 和其他站点/项目上使用 javascript (angularjs)
UI 项目:localhost/12345 Web API:本地主机/98777
UI 项目正在调用 Web API (C#) 项目,将令牌从 UI 传递到 WebAPI 以进行 CRUD 请求。
我在 ServerSide 项目中生成了令牌 - WEB API2 (localhost/98777), 1- 用户名/密码 2-然后是url localhost:/98777/Token,传递用户名+密码+令牌
这样,如果您在 fiddler 中调用它,它会返回一个令牌:使用内容类型: 应用程序/x-www-form-urlencoded。像这样生成一个令牌并将其写入 localDB,稍后可以在您的 UI 应用程序中使用这个生成的令牌来调用传递给 WebAPI 项目的 javascript (ajax/angular)。
我已经在我的客户端站点中实现了调用 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 中执行代码并添加记录 :(.
那么为什么我需要一个令牌呢????
有人可以建议我缺少哪一部分吗?人们能看到令牌是正常的吗?
此应用将用于内网和开发者使用,所以我需要最大限度地保护它...
【问题讨论】:
假设用户/令牌被授权添加记录,为什么请求来自控制台或 UI 有什么关系? 您不保护授权用户的令牌。您是否使用 SSL 来保护该令牌免受其他人的侵害?这将是安全风险。 【参考方案1】:人们能看到令牌是正常的吗?
是的,这很正常。据我所知,令牌只保存身份信息,以及一些客户端无法修改的声明。这是它唯一可以信任的东西:身份。
在服务器端,您必须检查(角色/权限/业务规则)与令牌身份对应的用户是否有权执行请求的操作。
永远不要依赖客户端 UI 的业务规则强制执行。始终仔细检查服务器端,您将是安全的。
【讨论】:
【参考方案2】:您可以考虑以下步骤,
-
有一个公钥
使用时间戳加密密钥
发送带有时间戳的加密密钥
使用相同的时间戳加密 API 中的密钥
比较两个键。
检查时间戳与系统时间。
【讨论】:
以上是关于从javascript传递到web api 2时如何隐藏或保护令牌的主要内容,如果未能解决你的问题,请参考以下文章
从 Javascript 将 KeyValuePair 或 IDictionary 列表传递给 Web Api 控制器
将日期从 Angular 传递到 Web API 2 的正确方法
如何使用 fetch 将 FormData 从 javascript 发送到 ASP.NET Core 2.1 Web API