在MVC项目认证之后,我需要一个关于如何在按钮点击后传递参数安全的解决方案
我做了以下代码
<form action="http://localhost:53988/Default.aspx" method="post" -- this is where is hosted SilverlightApp>
<input type="hidden" name="session" value="@(Helpers.Context.CurrentSession.ID)"/>
<input type="submit" value="RedirectToSilver" />
</form>
在Silverlight aspx页面(Default.aspx)中我得到了这个参数
<div id="silverlightControlHost">
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
<param name="source" value="ClientBin/Client.xap?<%=AssemblyInfo.GetVersionNumber()%>" />
<param name="minRuntimeVersion" value="4.0.50826.0" />
<param name="initParams" value="sessionId = '<%=HttpContext.Current.Request["session"] %>'" />
<param name="autoUpgrade" value="true" />
</object>
</div>
和app.xaml.cs
private void Application_Startup(object sender, StartupEventArgs e)
{
var sessionID= string.Empty;
if (e.InitParams.ContainsKey("sessionId"))
sessionID= e.InitParams["sessionId"];
}
一切正常但问题是客户端可以看到sessionID,我认为这不安全
http://i.stack.imgur.com/UQY70.jpg
我的目标是在没有向客户端显示的情况下将此会话ID安全地保存在Silverlight中?怎么做?
答案 0 :(得分:0)
创建一个操作以返回会话ID,并让silverlight客户端调用该端点以获取当前会话ID。
<强>控制器强>
[Authorize]
public class SessionController : Controller {
[HttpGet]
public JsonResult Get() {
return Json(Helpers.Context.CurrentSession.ID);
}
}
<强>客户端强>
private async void Application_Startup(object sender, StartupEventArgs e) {
var sessionID = string.Empty;
var httpClient = new HttpClient();
var url = "http://localhost:53988/Session";
var response = await httpClient.GetAsync(url);
if(response.IsSuccessStatusCode
&& response.Content.Headers.ContentLength.GetValueOrDefault() > 0) {
sessionID = await response.Content.ReadAsStringAsync();
}
}
您可以对端点进行硬编码或使其可被发现,这取决于您。我展示的样本也假设您没有使用WebApi。如果你愿意的话,这应该很容易实现。 我个人认为所有这一切都试图隐藏会话ID是没有意义的,但我不知道你的情况。