2013-10-11 199 views
1

我是一名尝试解决RavenDB安全问题的SQL Server DBA。如果我想设计一个应用程序安全性,我将为每个实际用户使用一个系统用户和一个应用程序用户。RavenDB身份验证和授权

是我的问题是,我怎么可以设置应用程序的用户的上下文。我需要向SecureFor()提供应用程序的用户名和操作。但是,我可以从哪里获取应用程序用户(已登录的用户)的信息,而无需在应用程序中对其进行硬编码。

我在RavenDB网站上看到的例子是在SecureFor中的硬编码用户,但在现实生活中,我将假定用户名将与实际用户相关,这将是动态的。

问候, Venky

回答

2

我想你所谈论的Authorization Bundle page within the RavenDB Documentation

您还没有提及任何有关问题的域名,所以我首先应该提及的是,我的偏好是根本不使用授权包。由于there is a difference between system users and application users,在大多数软件系统中,您应该允许系统用户对数据库进行100%的读/写访问,并控制应用程序用户使用应用程序逻辑访问的内容。

话虽这么说,我不想过多的争论点。假设您确实需要授权包。

您将根据业务规则定义自己的操作。我想你已经明白了,因为你不问在你的问题中会出现什么情况。

用户必须从在其中运行代码的上下文中定义。基本上,认证是一个单独的问题。

从ASP.NET Web应用程序,你要么使用Windows身份验证在域环境中,以获得用户的Windows身份,或者是窗体身份验证来获得存储在您自己的应用程序中的身份。您可以通过ASP.NET的内心获取当前用户的身份。 (访问它的最佳方式根据来自Web窗体,MVC,WebAPI等而不同)。如何将当前用户转换为授权用户字符串(文档示例中的Authorization/Users/DrHowser)取决于您。

+0

感谢大卫的解释得很清楚。我确实有一个后续问题。 –

+0

感谢David对此非常明确的解释。我确实有一个后续问题。我的印象是,应用程序用户(来自authroization包的用户)需要像SQL Server中的应用程序用户那样进行验证,但我现在明白RavenDB只是在SecureFor()中提到的用户ID。是否正确?再次感谢Venky –

+0

是的,您仍然需要授权(验证)传入用户的凭据。这是认证和授权的根本区别。假设您已经验证了用户的身份,RavenDB软件包只会进行授权。 –

0

您可能会发现以下有趣的内容。 ASP.NET身份是ASP.NET的新成员。 ASP.NET Identity允许您添加基本的登录/注销功能,并提供一流的支持,以便将您的会员资格信息保存在非SQL存储中。默认情况下,ASP.NET标识使用EF,但您可以轻松地使用RavenDb替换此图层,而无需更改代码。 您可以在RavenDb实施ASP.NET身份到这里看看https://github.com/tugberkugurlu/AspNet.Identity.RavenDB 这表明,如果你有一个MVC应用程序,你可以只注册RavenDb存储,而不是取代EF从EF到RavenDb您的会员信息的存储。 如果您想了解ASP.NET身份的更多信息,请访问:http://asp.net/identity