首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多租户-用户关系-一些现实生活的例子?(asp.net /网络安全)

多租户-用户关系-一些现实生活的例子?(asp.net /网络安全)
EN

Stack Overflow用户
提问于 2013-01-14 12:35:13
回答 1查看 1.7K关注 0票数 1

我很难把多租户的概念与websecurity (来自微软的head矩阵框架)结合起来。我正在建设一个mutli租户网站,内容包括:

  • mvc4
  • entityframework6
  • 网络安全(来自网络矩阵)

认证

我可以允许用户使用WebSecurity方法注册和登录。我可以验证用户是否已登录/通过User.Identy.IsAuthenticated进行身份验证。

确定租户

我通过url ([companyname].domain.com)确定租户。

注册新客户

新客户可以通过我的应用程序中的注册表单创建租户。如果用户注册(在url中没有公司名称),他将不得不提供一些帐户输入作为一些公司的输入。然后,他将创建一个符合companyname.domain.com的新别名。因此,长话短说,租户总是耦合到一个或多个用户(1-N).。

需求

我需要保证租户'abc‘的用户永远无法登录到租户'xyz’。(因此,我也不太喜欢WebSecurity框架,因为它似乎是我所有租户的共享数据库(或者我错了吗?)

我的问题

你们能分享一些关于如何在现实世界多租户应用程序中处理“租户”和“经过身份验证的用户”检查的见解吗?

我最热门的话题是:

  • 您是验证租户+身份验证用户一次,还是在每个控制器中的每个操作中验证?
  • 依赖默认的websecurity类是安全的,还是我会更好地设计自己的用户表,还是客户MembershipProviders是更好的选择?
  • 我该用曲奇还是那是个很糟糕的选择。

如果你能与我分享一些关于这些问题的文档,我会得到很大的帮助。我强烈希望看到更多关于多租户的详细文档,这些文档深入到实际的设计(甚至是代码示例)中。

我已经阅读了大部分的“一般文件”/“商业报告”:

  • http://msdn.microsoft.com/en-us/library/aa479086.aspx
  • http://www.businesscloud9.com/content/identifying-tenant-multi-tenant-azure-applications-part-2/10245
  • http://msdn.microsoft.com/en-us/library/windowsazure/hh689716.aspx
  • http://www.developer.com/design/article.php/3801931/Introduction-to-Multi-Tenant-Architecture.htm

如果需要,我将重新编写/添加代码/做任何需要得到帮助的事情。

在此之前,非常感谢您。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-14 13:44:37

您可以获得的每个解决方案都取决于您的应用程序做什么以及它如何处理数据,如果您使用存储库模式,如果您使用IoC等。您可以考虑通过将用户if传递到存储库类并在应用程序需要数据时进行筛选来实例化您的存储库,您可以在您的控制器中这样做--这种方法经常使用(甚至在VS SampleProjects中--比如"SinglePage应用程序“--您可能想下载一些开源项目,看看是如何做到的)。

在我的一些项目中,我所做的并不需要任何“真正花哨”的东西,而且我也不期望会有很大的负载:-我在onActionExecuting事件中设置了每个其他控制器都需要实现的BaseController。

代码语言:javascript
运行
复制
public Employee CurrentEmployee { get; set; }

protected override void OnActionExecuting(ActionExecutingContext ctx)
{
    base.OnActionExecuting(ctx);
    string authenticatedUser = User.Identity.Name;
    CurrentEmployee = mortenDb.Employees.FirstOrDefault(e => e.Account.Login == authenticatedUser );
}

因此,在所有其他控制器中,我能够引用属于当前登录用户的Employee对象。你也可以对你的公司对象做同样的事情。因此,我假设您会像我一样查询员工,检索公司引用并将其传递给您的BaseController上的公共属性。这可能不是最好的解决方案,但只要您记得通过Company对象导航属性提取数据,它就相当安全(例如。无论你在你的模型中拥有什么,员工、票、请求等等)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14318511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档