0

我正在为 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 - 我正在考虑使用 Enterprise Library for Data Access Layer - 有人知道适用于 Azure 新手的好的视频演练吗?

这是我知道的很多问题,但仍然希望得到一些专家的建议。

干杯。

4

3 回答 3

1

听起来您正在为生产应用程序做出一些关键的设计决策,所以我强烈建议您与专家一起工作,而不是仅仅依靠论坛的建议来做这个基本的事情。

关于第 1 项(安全),您引用的安全最佳实践文章是一篇不错的文章,但它不会为您做出决定。正如它所指出的,处理身份的方法有很多种,而 Windows Azure 并没有让您以某种方式去做。处理身份的最现代方式称为基于声明的安全性。如果您使用基于声明的安全性,您将需要确定您的身份提供者 (IP) 是谁。这可以是域(通过 Active Directory)、社交网络网络提供商(例如 Google、Yahoo 或 Facebook),或者您自己的由凭证数据库支持的自定义安全令牌服务。如果您想支持多个身份提供者(以便用户可以选择他们登录的方式),您可能希望利用 Windows Azure 的访问控制服务作为中介。

关于第 2 项(安全示例),我建议尝试Windows Identity Developer Training Kit中的动手实验。这将使您对基于声明的安全性有一个很好的了解。

关于第 3 项(保存和检索面向文件的数据),blob 存储将是要使用的逻辑服务。您需要提供访问层和用户界面,以提供您描述的安全和共享功能。

关于第 4 项(在 Windows Azure 上使用企业库进行数据访问),这篇文章可能会有所帮助。

于 2012-07-23T15:48:05.403 回答
0

您需要将其分解为具体问题。

  1. 如果您希望应用程序管理用户 ID 密码,则 MembershipServices 是一个选项。如果您想信任第三方进行身份验证,那么 ACS。为什么登录和会话是同一个问题。

  2. 更多关于安全性。从需求开始

  3. 表有行大小限制。你只有小文件?
    共享访问签名将减轻网站的负担

  4. 只能通过视频学习?来吧,那里有很多信息。

于 2012-07-23T18:55:06.930 回答
0

你的方法很好,除了我会放弃“FormsAuthentication.SetAuthCookie(result, false);” 线。在 Azure 中,您似乎会丢失 UserData 字段值,或者 userData 字段的外观不包含它的值。实际上,您的 SetAuthCookie 将创建您已建立票证的第二个版本。我想如果您需要将票证实例生成到其他进程,这可能会派上用场。在大多数应用程序中,您只需要一个版本即可为单个 Web 角色运行云作品。此外,我采用了这种方法并利用 azure 存储表来存储我需要的其他数据,我很高兴我做到了。Azure 中会出现一些奇怪的情况,会话变量(包括这种方法)有时会返回 null。这就像流式传输 UDP 与 TCP。互联网正在流媒体。一个字节消失了,会话似乎在下一次刷新时又消失了,这就是我使用 Azure 的表存储添加更多保证的原因。我正在那里创建会话事务。到目前为止,这么好的和很少的表交易等于安心。

于 2012-07-25T20:32:57.253 回答