我正在为Windows Azure云开发一个新的Web应用程序,但是已经被所有可用的指南,最佳实践,存储可能性,缓存和安全性所困惑。我看了很多视频,并阅读了大量的文档,但是我读的越多,决策层就越混乱。这就是我想要的东西:
1 - 开发一个Web应用程序,用户可以使用电子邮件/密码组合登录。登录用户时,会有一个包含UserID + CustomerID组合的会话。 UserID + CustomerID将用于显示该用户的特定数据。该申请适用于律师事务所,因此安全性必须非常严格。该应用程序将拥有10000多个用户,可能同时大约200-500。我已经读过,ASP.NET会话应该存储在共享缓存服务中,以便在节点升级/故障节点的情况下不会重置会话。据我所知,128 MB缓存每秒有100个事务限制 - 我不确定这是否有效 - 如果我从缓存中获取会话数据,这将算作一个事务吗?
在一个旧的应用程序中,我正在使用这样的代码(这种方法适用于Azure,或者我应该开发一些自定义的会话管理系统来处理?任何代码示例?):
protected void CustomValidatorLogin_ServerValidate(object source, ServerValidateEventArgs args)
{
string result = String.Empty;
if (DataAccess.User_Logon(this.txtEmail.Text, this.txtPassword.Text, Request.UserHostAddress, Request.UserAgent, ref result)
{
args.IsValid = true;
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, this.txtEmail.Text, DateTime.Now, DateTime.Now.AddMinutes(Constants.sessionExpires), false, result);
HttpCookie cookie = null;
if (cbRemember.Checked)
{
FormsAuthenticationTicket sticket = new FormsAuthenticationTicket(1, result, DateTime.Now, DateTime.Now.AddMinutes(Constants.sessionExpires), false, result);
cookie = new HttpCookie(FormsAuthentication.FormsCookieName + Constants.cookiePrefix, FormsAuthentication.Encrypt(sticket));
cookie.Expires = DateTime.Now.AddYears(1);
}
else
{
cookie = new HttpCookie(FormsAuthentication.FormsCookieName + Constants.cookiePrefix, string.Empty);
cookie.Expires = DateTime.Now.AddYears(-1);
}
Response.AppendCookie(cookie);
FormsAuthentication.SetAuthCookie(result, false);
}
else
{
args.IsValid = false;
}
}
2 - 相似,据此而言 http://www.windowsazure.com/en-us/develop/net/best-practices/security/ 我应该注意很多安全方面的考虑因素。 有人可以推荐一些关于如何创建登录的代码示例 将这些最佳实践纳入其中的功能?
3 - 系统将允许用户保存数据(上传文件),以后可以下载,删除,更新。这些文件既是用户特定的(UserID),也是客户特定的(CustomerID)。例如,用户可以上传他将有权访问的文件(UserID),但是他也可以基于CustomerID上传可供整个组织(律师事务所)使用的文件。我很困惑是否选择BLOB或Tables以及为什么。此外,实现此类功能的最佳做法是什么。
4 - 我正在考虑使用企业库进行数据访问层 - 是否有人知道Azure新手的良好视频演练?
这是我所知道的很多问题,但仍希望提供一些专家建议。
干杯。
答案 0 :(得分:1)
听起来您正在为生产应用程序做出一些关键的设计决策,因此我强烈建议您与专家合作,而不是单独依靠论坛建议来实现这一基础。
关于第1项(安全性),您引用的安全性最佳实践文章很好,但它不会为您做出决定。正如它所指出的,有许多方法可以处理身份,而Windows Azure并没有让你以某种方式做到这一点。处理身份的最现代方式称为基于声明的安全性。如果您使用基于声明的安全性,则需要确定您的身份提供者(IP)是谁。这可以是域(通过Active Directory),社交网络提供商(例如Google或Yahoo或Facebook),也可以是凭证数据库支持的自定义安全令牌服务。如果您想支持多个身份提供商(因此用户可以选择如何登录),您可能希望利用Windows Azure的访问控制服务作为中介。确保您的IP可以提供做出正确授权决策所需的信息。
关于第2项(安全样本),我建议您尝试Windows Identity Developer Training Kit中的动手实验。这将使您对基于声明的安全性有所了解。
关于第3项(保存和检索面向文件的数据),blob存储将是要使用的逻辑服务。您需要提供访问层和用户界面,以便提供您所描述的安全性和共享功能。
关于第4项(在Windows Azure上使用Enterprise Library for Data Access),this article可能会有所帮助。
答案 1 :(得分:0)
你需要将其分解为具体问题。
如果您希望应用程序管理userID密码,那么MembershipServices就是和选项。如果您想信任第三方进行身份验证,那么ACS。为什么登录和会话是同一个问题。
更多关于安全性的信息。从要求开始
表格具有行大小限制。你只有小文件?
共享访问签名将从网站上卸载
您只能通过视频学习?来吧那里有很多信息。
答案 2 :(得分:0)
你的方法很好,除了我删除" FormsAuthentication.SetAuthCookie(结果,假);"线。在Azure中,您似乎会丢失UserData字段值,或者使userData字段的外观不具有其值。实际上,您的SetAuthCookie将创建已建立的票证的第二个版本。我想如果你需要将你的票证实例产生到其他进程,这可能会派上用场。在大多数应用程序中,只需一个版本就可以运行您的云工作以实现单个Web角色。我也采用了这种方法,并使用天蓝色存储表来存储我需要的其他数据,我很高兴我做到了。 Azure中存在一些奇怪的事件,其中会话变量(包括此方法)有时会返回null。它就像流式传输UDP与TCP一样。互联网是流媒体。一个字节关闭,会话似乎在下一次刷新时消失并再次返回,这就是因为我使用Azure的表存储添加了更多保证。我在那里创建会话交易。到目前为止,如此好的和非常小的交易表等于安心。