【发布时间】:2014-08-30 15:53:11
【问题描述】:
我有一个 ASP.NET Web API 服务器应用程序和 Javascript 前端。
我实现身份验证的方式是使用在HTTP Response Headers 中发送和接收的令牌。
当用户登录应用程序时,我的服务器将向客户端发送回一个带有会话令牌的 JSON 对象。然后,javascript 客户端将其存储在浏览器 cookie 中。
javascript 客户端对服务器进行的每次调用,都会将令牌发送到自定义标头,以便服务器可以解密并在数据库中对其进行验证,以便知道它是否是有效的会话。
这里一切正常,如果我需要保护那部分,那么添加 SSL 会有所帮助。
现在,应用程序中有调用需要使用IFrame,因此我将src 属性设置为我需要调用的Web api 方法。
使用 IFrame 时无法添加自定义 HTTP Header,只需在 src 属性中添加一个简单的 URL
当然,使用它无法发送custom header,所以我所做的就是将参数附加到scr url 中,如下所示:
<iframe scr="/api/report/GenerateReport?sessionUid=" + getCookie('sessionuid') ></iframe>
这是我的 web api 方法,接收 sessionUid 作为参数。
[HttpGet]
public HttpResponseMessage GenerateReport(string sessionUid) {
// validates session
bool validSession = common.ValidateSession(sessionUid);
if (validSession) {
// do some stuff here
}
}
我的问题是...我怎样才能保护我的令牌,因为如果有人窃取了 sessionuid,他就可以调用所有接收 sessionUid 作为参数的 HttpGet 方法?
有什么线索吗?
【问题讨论】:
-
不使用 custom 标头,为什么不使用
Authorization标头?像这样的东西:Authorization: Token your_sessionUid_here。Token方案是编造的,但你不在乎。您所需要的只是标题中的会话 uid。那么您就不必担心在 URI 中暴露您的令牌。 -
使用 IFrame 是不可能的。我试图阅读它,但无法在 IFrame src 属性中发送 http 标头
标签: c# asp.net-web-api access-token asp.net-web-api2