我一直在阅读Azure的访问控制服务和基于声明的授权一段时间,无论出于何种原因,我仍然没有看到从基于角色/权限的授权转变为基于声明的模型背后的理由.模型看起来与我类似(它们可能是),除了客户端可以做和不能做的列表来自第三方并且被包含在某种令牌中,而不是来自某种类型的数据库服务器必须查询.让第三方(令牌发行人)参与的优势是什么?
我完全理解将认证外包给第三方的优势.它允许应用程序不必一直创建新用户,担心存储密码等,只需将其推送到已经设置了基础结构的其他服务.它本质上是DRY的身份验证原则.
但是,在我看来,同样的逻辑不适用于授权.每个应用程序都有自己必须保护的资源,因此也有自己的授权用户执行某些操作的规则.基础设施看起来很简单,每个应用程序都可以自己创建它(一个表将用户映射到角色,可能还有另一个映射角色到权限),即使你想外包它,似乎基于声明的模型正在做更复杂的事情.
我见过的唯一部分解释来自于WCF构建基于声明的安全模型,它给两个主要的优点,基于声明的身份验证:更多的灵活性,并且有人"担保",一个要求的信息是正确的.你什么时候需要其中任何一个?
基于声明的授权似乎越来越受欢迎,因此我认为必须有一些合理的理由; 我还没弄明白那是什么.有人可以提供一个具体的例子,说明基于声明的auth比基于角色的工作更好,以及为什么它在这种情况下效果更好?
(编辑:我错过了文章中列出的第三个好处:支持单点登录/联合.但是如果没有获得授权,身份验证是否会自行处理?)
我现在有一个免费托管的FogBugz On Demand(FOD)产品项目.这非常适合功能/问题跟踪.但我一直在使用完全依赖于我的开发机器的代码库.我想与距离我几千英里的另一个人合作.所以我们需要一个源控制解决方案(SCM)!
我使用Visual Studio(2005,但可以根据需要升级到更高版本).
我知道FogBugz 可以与许多源控制系统集成.
那么现在的问题是:哪些在线 SCM产品能够与FOD和VS很好地集成?对于小型代码库,哪些可以低成本或无成本地完成.我在哪里可以找到一个经过验证的配方.
我对其他提供相同功能的解决方案持开放态度.请不要建议Trac - 我认为很高,但我想在我的问题跟踪解决方案中使用FOB(特别是基于证据的日程安排)的功能.实际上,我需要将FOB + VS +一些在线SCM产品组合成一个低成本或无成本的解决方案,供两个程序员进行协作.
我正在尝试使用HttpRuntime.Cache.Insert()来缓存价格值,但只是在清除之前只显示值几个小时.我究竟做错了什么?我想将值保留在缓存中3天.
HttpRuntime.Cache.Insert(CacheName, Price, null, DateTime.Now.AddDays(3), TimeSpan.Zero);
Run Code Online (Sandbox Code Playgroud) 我正在尝试模拟一个SqlDataReader
SqlDataReader reader = mocks.CreateMock<SqlDataReader>();
Expect.Call(reader.Read()).Return(true).Repeat.Times(1);
Expect.Call(reader.Read()).Return(false);
Expect.Call(reader.HasRows).Return(true);
Expect.Call(reader.Dispose);
Expect.Call(reader["City"]).Return("Boise");
Expect.Call(reader["State"]).Return("State");
Expect.Call(reader["LAT"]).Return(100);
Expect.Call(reader["LON"]).Return(-100);
mocks.ReplayAll();
Run Code Online (Sandbox Code Playgroud)
但我一直得到一个Rhino.Mocks.Exceptions.ExpectationViolationException:IDisposable.Dispose(); 在我的方法中预期#0,实际#1错误
using (reader)
{
if (reader.HasRows)
{
while (reader.Read())
{
CityState myCity = new CityState
{
City = reader["City"].ToString(),
State = reader["State"].ToString(),
Lat = Convert.ToInt32(reader["LAT"]),
Lon = Convert.ToInt32(reader["LON"])
};
myCities.Add(myCity);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
有没有人知道可以保存到文件的基于JTable的Swing组件或代码示例?ie:提供一个菜单项或按钮,单击该按钮会提示用户输入文件位置并将表的内容保存到文件(CSV,XLS,TXT或其他).
简单的部分是循环遍历行并保存到文件.但是桌面本身也需要一个UI组件,允许用户启动保存.
编写可以在.NET(windows)和Mono(linux)上交叉编译的代码的最佳实践是什么?虽然我对.NET非常熟悉,但我对Mono及其所有问题都没有经验.有没有人看过关于这个的好博客文章或最佳实践论文,我还没有能够挖掘出来?我会坚持使用C#3.0级别的功能.
与我有关的事情首先是Interop,因为我需要调用一些本机代码.接下来是处理名称空间的最佳方法,例如Mono.XXX.我应该使用一堆#if吗?隔离每个平台程序集中的代码?
任何有关建筑和设计的建议都将不胜感激!如果你在visual studio(任何版本)的Linux/Mono交叉编译方面有任何经验,我也会对此感兴趣.
我正在使用ANTLR生成Java源文件.我可以让Eclipse了解生成的文件是派生的,但它仍然会给我警告无害的东西(例如不必要的导入等).我想配置Eclipse在显示警告时忽略派生文件.这可能吗?
我想试试gettext.
以下是我认为它的工作原理 -
首先你使用某种po编辑器并告诉它扫描你的应用程序的目录,创建这些".po"文件,应用程序为扫描的每个文件生成一个po文件,其中包含编程语言中的字符串,然后将它们编译为二进制mo文件,gettext解析,并使用高级API调用方法,Zend_Translate并指定要使用gettext,可以设置为缓存转换,它只返回那些.
我真的不清楚的部分是如何真正完成po文件的编辑,这是手册 - 对吗?然后当编译完成时,应用程序依赖于二进制mo文件.
如果有人能提供有用的linux应用程序来编辑.po文件,我将不胜感激.
假设我们有一个服务器S和一些客户端(C),并且每当客户端更新服务器时,服务器上的内部数据库都会更新并复制到其他客户端.这都是使用Intranet环境中的套接字完成的.我相信攻击者可以相当轻松地嗅到这个纯文本流量.我的同事们认为我过于偏执,因为我们身处防火墙之后.
我是否过于偏执?你知道任何利用这种情况以及可以采用不同方式做什么的漏洞(请链接).客户端用Java重写,但服务器仍在使用C++.代码中的任何东西都可以防止攻击?
我不明白为什么Where()子句在最后一个例子中没有给我正确的结果.
这没有什么不同吗?为什么C#表现不同?
transactions = IEnumerable<Transaction> //pseudocode
//This works: It gives me the transaction I need.
DateTime startDate = DateTime.Parse(parameter.Constraint);
transactions = transactions.Where(T => T.date >= startDate);
//This doesn't work... No actual code changed, only the way of writing it...
//I get 0 results.
transactions = transactions.Where(T => T.date >= DateTime.Parse(parameter.Constraint));
Run Code Online (Sandbox Code Playgroud)
好的,确实有必要提到使用Entity Framework加载事务.
transactions = this.db.Include("blablabla").OrderByDescending(T => T.date);
Run Code Online (Sandbox Code Playgroud)
也许这就是为什么它做得很奇怪?由于实体Linq的工作方式?