好的,这是一个场景:
现在,在这一点上,Eve有一个被盗的笔记本电脑,它上面有一个持久的cookie,它将把她作为Bob登录到mysite.com - 据我所知,即使Bob改变了他的话,这也会有效.密码.
默认情况下,表单身份验证cookie不包含Bob的密码(无论是明文密码,散列密码还是其他加密密码) - 因此Bob的密码根本不涉及cookie身份验证过程,并且上周工作的用户名仍然可用今天.
这是一个容易解决的漏洞 - 通过简单地设置FormsAuthentication.SetAuthCookie("username:passwordHash")或其他东西,然后在您的身份验证处理程序中解密和拆分cookie - 但我很难相信这个问题存在于'开箱即用' ......我错过了什么吗?
编辑:请注意,我在这里假设"记住我"按钮的目的是阻止您每次访问网站时都输入密码.这适用于Facebook,Twitter,Gmail,以及我能想到的几乎所有其他网站 - 如果这不是.NET FormsAuthentication中'持久性cookie'选项的目的,我会感到非常惊讶.
此外,是的,我接受在每个传入的请求上执行双因素身份验证会产生一定的开销,但实际上它只比根据用户名从数据库中检索用户稍微贵一些,而您可能正在做的事情. .
编辑2:似乎至少有一个主要的.NET站点 - CodePlex.com - 容易受此影响; 见http://codeplex.codeplex.com/discussions/350646
我正在开发一个NuGet包,它将一堆内容 - 视图,脚本,CSS文件 - 安装到Web应用程序中,并尝试改进更改 - 编译 - 测试周期.我有两个项目 - 框架本身("包")和使用它的演示网络应用程序("网站")
作为Visual Studio构建过程的一部分,我需要做的是:
问题是 - 似乎没有任何命令行等效Uninstall-Package于NuGet Package Manager控制台.我错过了什么吗?
我试图通过从不同的命名空间向不同的端点发送消息来配置我的NServiceBus配置中的消息端点映射.
因此,我在web.config中配置了以下内容:
<MessageEndpointMappings>
<add Messages="Company.Messages.Accounts" Endpoint="ServiceInput" />
<add Messages="Company.Messages.Payments" Endpoint="ServiceInput" />
<add Messages="Company.Messages.Cancellations" Endpoint="ServiceInput" />
<add Messages="Company.Messages.Notifications" Endpoint="ServiceInput" />
</MessageEndpointMappings>
Run Code Online (Sandbox Code Playgroud)
但是,当我的应用程序启动时,我收到以下异常:
Spring.Objects.PropertyAccessExceptionsException:PropertyAccessExceptionsException(1个错误); 嵌套的PropertyAccessExceptions是:[Spring.Core.TypeMismatchException:无法将类型[System.Collections.Hashtable]的属性值转换为属性'MessageOwners'所需的类型[System.Collections.IDictionary].,内部异常:System.ArgumentException:问题加载消息程序集:Company.Messages.Payments ---> System.IO.FileNotFoundException:无法加载文件或程序集"Company.Messages.Payments"或其依赖项之一.该系统找不到指定的文件.文件名称:'Company.Messages.Payments'
我觉得有趣的是它似乎找到了Company.Messages.Accounts但在第二个配置的行上失败了.我想也许它不喜欢让它们全部转到同一个端点,但更改此配置以使它们进入不同的端点并没有改变我收到的错误消息.
我究竟做错了什么?是不是可以通过命名空间来分割消息(我所见过的只是按类型和汇编)?
谢谢,史蒂夫
我使用DotNetOpenAuth创建了一个OAuth2授权服务器,它工作正常 - 我正在使用资源所有者密码流,并成功地为访问令牌交换用户凭据.
我现在想要使用该访问令牌从ServiceStack API中的安全端点检索数据,我无法弄清楚如何执行此操作.我已经检查了ServiceStack附带的Facebook,Google等提供商,但目前尚不清楚我是否应该遵循相同的模式.
我想要实现的目标(我想!)是
GET /users/csmith/photosAuthorization: Bearer 1234abcd...步骤1和2正在运行,但我无法弄清楚如何将DotNetOpenAuth资源服务器代码与ServiceStack授权框架集成.
我是如何实现这一目标的?我在如何使用ServiceStack构建安全api作为OAuth2.0的资源服务器时发现了类似的StackOverflow帖子?但它不是一个完整的解决方案,似乎没有使用ServiceStack授权提供程序模型.
编辑:更多细节.这里有两个不同的网络应用程序.一个是身份验证/授权服务器 - 它不承载任何客户数据(即没有数据API),但公开了接受用户名/密码并返回OAuth2访问令牌和刷新令牌的/ oauth/token方法,还有提供令牌刷新功能.这是基于ASP.NET MVC构建的,因为它几乎与DotNetOpenAuth附带的AuthorizationServer示例相同.这可能会在以后更换,但现在它是ASP.NET MVC.
对于实际的数据API,我使用的是ServiceStack,因为我发现它比WebAPI或MVC更好地暴露了ReSTful数据服务.
所以在下面的例子中:

该客户端是用户的本地机器上运行的桌面应用程序,该验证服务器是ASP.NET MVC + DotNetOpenAuth和资源服务器是ServiceStack
需要的特定DotNetOpenAuth代码片段是:
// scopes is the specific …Run Code Online (Sandbox Code Playgroud) 我正在研究一些HTML5演示代码,包括类似的东西 <input type="date" />
这当前在Opera 10中正常工作,但每个其他浏览器只显示正常的文本输入.然后我使用jQuery.date-input插件在不支持它的浏览器上覆盖此行为.
问题是 - jQuery也在Opera上运行,所以在Opera中我得到两个日历日期选择器(一个来自浏览器,一个来自jQuery)
我现在可以解决这个问题if (window.opera)- 但是有一些方法可以使用jQuery.support,我可以可靠地检测当前浏览器是否支持特定的HTML5功能吗?
我正在研究一个CSS框架,我可以将其作为NuGet包放入其他项目中.
为了保持清洁,整个框架 - 视图,样式,图像和母版页/布局页面 - 实际存储在〜/ CssThing /下
与WebForms视图引擎完美配合,但是当我将_layout.cshtml文件移动到〜/ CssThing /然后修改我的Razor页面时说:
@{
Layout = "~/CssThing/_layout.cshtml";
}
Run Code Online (Sandbox Code Playgroud)
它开始抱怨ViewBag没有被定义,或者说The name 'Url' does not exist in the current context,或者其他各种奇怪的东西表明视图不再继承正确的基类.
我怎样才能让它发挥作用?
注意:一切都像这样拆分的原因是没有办法强迫NuGet覆盖现有代码,并且没有办法在没有获取所有jQuery等引用的情况下启动空的MVC3 Web应用程序,所以不要冒险我的框架因为一半的文件已经存在,所以部署了一半,我保持一切完全独立.
在VS2010中运行的Resharper 8告诉我我可以删除支票principal.Identity != null:

我假设这是因为有一个NotNull属性或潜伏在IPrincipal的代码中的东西,但是编写自己的IPrincipal实现很容易返回null身份:
void Main() {
var foo = new FooPrincipal();
Console.WriteLine(foo.Identity == null ? "Yep!" : "Not Null");
}
class FooPrincipal : IPrincipal {
public IIdentity Identity { get; set; }
public bool IsInRole(string role) { return(false); }
public FooPrincipal() {}
}
Run Code Online (Sandbox Code Playgroud)
Resharper如何知道传入此方法的IPrincipal不会成为我返回null身份的FooPrincipals之一?
编辑:好的,这是一个完整的复制案例,Resharper实际上鼓励你编写在生产中爆炸的代码......
using System;
using System.Security.Principal;
namespace ResharperPrincipalTest {
class Program {
static void Main(string[] args) {
var p = new TestPrincipal();
var isJeff = IsUserCalledJeff(p);
Console.WriteLine(isJeff);
}
static bool IsUserCalledJeff(IPrincipal principal) …Run Code Online (Sandbox Code Playgroud) 查看以下HTML/Javascript代码片段:
<html>
<head>
<script type="text/javascript">
var alerts = [];
for(var i = 0; i < 3; i++) {
alerts.push(function() { document.write(i + ', '); });
}
for (var j = 0; j < 3; j++) {
(alerts[j])();
}
for (var i = 0; i < 3; i++) {
(alerts[i])();
}
</script>
</head><body></body></html>
Run Code Online (Sandbox Code Playgroud)
这输出:
3, 3, 3, 0, 1, 2
Run Code Online (Sandbox Code Playgroud)
这不是我所期待的 - 我期待输出 0, 1, 2, 0, 1, 2,
我(错误地)假设被推入数组的匿名函数将表现为闭包,捕获i创建函数时分配的值- 但它实际上表现i为行为全局变量.
任何人都可以解释i这个代码示例的范围内发生了什么,以及为什么匿名函数没有捕获它的值?
给出类似于这样的类的XML注释:
///<summary>Handles the AuthenticateRequest event in the ASP.NET page request lifecycle to authenticate users.</summary>
///<remarks>
///<para>This module will authenticate users based on cookies, form posts, or an impersonation request from the admin system.</para>
///<para>If authentication succeeds, both the <see cref="System.Threading.Thread.CurrentPrincipal" /> and the <see cref="System.Web.HttpContext.User"/> property are set to an instance of <see cref="MyPrincipal"/> representing the authenticated user.</para>
///</remarks>
Run Code Online (Sandbox Code Playgroud)
如何获取对框架文档中相应页面的引用System.Threading.Thread.CurrentPrincipal和System.Web.HttpContext.User链接?
我有一些代码将强类型业务对象映射到匿名类型,然后将其序列化为JSON并通过API公开.
在将我的解决方案重组为单独的项目后,我的一些测试开始失败.我已经做了一些挖掘,事实证明,Object.Equals对来自不同程序集的代码返回的匿名类型的行为有所不同 - 我不知道为什么,或者我可以做些什么来解决它.
在https://github.com/dylanbeattie/AnonymousTypeEquality有完整的repro代码,但实际上破坏的位在下面.此代码位于测试项目中:
[TestFixture]
public class Tests {
[Test]
public void BothInline() {
var a = new { name = "test", value = 123 };
var b = new { name = "test", value = 123 };
Assert.That(Object.Equals(a,b)); // passes
}
[Test]
public void FromLocalMethod() {
var a = new { name = "test", value = 123 };
var b = MakeObject("test", 123);
Assert.That(Object.Equals(a, b)); // passes
}
[Test]
public void FromOtherNamespace() {
var …Run Code Online (Sandbox Code Playgroud)