小编Kei*_*ith的帖子

如何在.Net中解析SAML断言请求

我正在尝试在.Net中实现SAML SSO解决方案,但我在解析断言时遇到问题.

我有一个示例断言(看起来像byte[]数据作为文本)和相应的.p7b文件.

我想从中加载密钥.p7b并将断言解密为XML文档.

到目前为止,我认为我正在正确读取键:

// get the key data
byte[] certificateData = System.IO.File.ReadAllBytes("myKeys.p7b");

// decode the keys
var cms = new SignedCms(SubjectIdentifierType.IssuerAndSerialNumber);
cms.Decode(certificateData);

var samlCertificates = cms.Certificates;
Run Code Online (Sandbox Code Playgroud)

然后我尝试解析我遇到问题的断言:

// we have a keychain of X509Certificate2s, we need a collection of tokens
var certificatesAsTokens =
    from X509Certificate2 cert in samlCertificates
    select new X509SecurityToken(cert) as SecurityToken;

// get a token resolver
var tokens = new ReadOnlyCollection<SecurityToken>(
    certificatesAsTokens.ToList());
var resolver = SecurityTokenResolver.CreateDefaultSecurityTokenResolver(
    tokens, true);

// get …
Run Code Online (Sandbox Code Playgroud)

.net saml x509certificate single-sign-on pkcs#7

6
推荐指数
1
解决办法
2万
查看次数

在Application_BeginRequest期间检查静态文件?

我有一个Global.asx文件,需要进行自定义身份验证,审核和分析.这是必需的,因为它支持基于SAML的SSO系统,需要覆盖正常的.Net身份验证(不支持SAML或混合身份验证)

我不想启动它的静态文件,如.js,.css,.png,等

在Cassini/WebDev和IIS7中确实如此.

我想要的是一些简单的检查,比如this.Request.IsStaticFile(不幸的是,它不存在)来识别静态文件.

我意识到编写它会相当简单,但感觉就像已经存在的东西 - IIS已经为静态文件应用了缓存策略等等.

我需要一个代码解决方案,而不是IIS配置更改一个.

更新

这是我目前的解决方法:

/// <summary>Hold all the extensions we treat as static</summary>
static HashSet<string> allowedExtensions = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
{
    ".js", ".css", ".png", ...
};

/// <summary>Is this a request for a static file?</summary>
/// <param name="request">The HTTP request instance to extend.</param>
/// <returns>True if the request is for a static file on disk, false otherwise.</returns>
public static bool IsStaticFile(this HttpRequest request)
{
    string fileOnDisk = …
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc static-files global-asax

6
推荐指数
1
解决办法
3596
查看次数

首次调用页面上的Url.Action很慢

我有一个相当简单的ASP.MVC视图的性能问题.

这是一个几乎是即时的登录页面,但需要大约半秒钟.

经过大量挖它看起来像这个问题是第一次调用的Url.Action-它采取围绕450ms(根据MiniProfiler),但似乎出奇的慢.

随后的调用时间Url.Action<1ms,这更符合我的预期.

这是我使用的是否是一致的Url.Action("action", "controller")Url.Action("action"),但似乎并没有,如果我使用的情况发生Url.Content("~/controller/action").我打电话时也会发生这种情况Html.BeginForm("action").

有谁知道是什么导致了这个?

一挖成认为,RouteCollection.GetVirtualPath可能是罪魁祸首,因为这是常见的两种Url.ActionHtml.BeginForm.但是,肯定是在整个地方都使用了?我的意思是,½秒太慢了.

我有20个左右的自定义路由(它是一个相当大的应用程序,带有一些遗留的WebForms页面),但即便如此,时间似乎太慢了.

任何想法如何解决它?

asp.net-mvc performance urlhelper route-constraint

6
推荐指数
1
解决办法
3172
查看次数

检查是否支持Javascript删除功能

在Javascript中,您可以delete使用对象属性:

var o = { x: 1, y: 2 };

var wasDeleted = delete o.x;
Run Code Online (Sandbox Code Playgroud)

现在o.x应该是undefined,现在wasDeletedtrue

但是,您只能删除本机对象,不幸的是,浏览器对此似乎有不同的想法:

window.x = 1;

delete window.x;
Run Code Online (Sandbox Code Playgroud)

现在在Chrome和IE9-10 x中将是undefined,但在IE6-8中将引发异常:

“对象不支持此操作”

大。请注意,这并非delete不受支持...

// Oops, no var, so this is now a global, should've 'use strict'
o = { x: 1, y: 2 };

// Works
delete o.x;

// Works
delete window.o.y;

// Fails, but only in IE6-8 :-(
delete window.o
Run Code Online (Sandbox Code Playgroud)

我意识到我可以添加一个 …

javascript cross-browser ecmascript-5 browser-feature-detection

6
推荐指数
1
解决办法
2109
查看次数

我应该每次打开一个IDBDatabase还是保持一个实例打开?

我有一个SPA应用程序,将进行多次读/写IndexedDB.

打开DB是一个带回调的异步操作:

var db; 
var request = window.indexedDB.open("MyDB", 2);

request.onupgradeneeded = function(event) { 
    // Upgrade to latest version...
}

request.onerror = function(event) { 
    // Uh oh...
}

request.onsuccess = function(event) {
    // DB open, now do something
    db = event.target.result;
};
Run Code Online (Sandbox Code Playgroud)

我可以通过两种方式使用此db实例:

  1. db在页面/ SPA的生命周期中保留一个实例?
  2. db.close()当前操作完成后调用并在下一次操作中打开一个新操作?

这两种模式都存在缺陷吗?保持indexedDB开放是否有任何风险/问题?每个open动作是否有开销/延迟(超过可能的升级)?

javascript indexeddb

6
推荐指数
2
解决办法
736
查看次数

如何使用电子/电子构建器创建发布渠道?

我有一个电子,我要介绍的并行释放通道的应用程序:stable,next(尝鲜)和dev(用于测试最新版本).

这些将分别具有一个分支,首先出现新功能dev,进行nextbeta测试并最终进入stable.

我正在使用电子构建器来制作这些发布包,我希望每个都有自己的自动更新 - 所以当我发布新next版本时,所有用户都会获得更新.

我希望应用程序是独立的 - 用户可以安装两个通道并同时运行.他们会有不同的名字和不同的图标.

我可以在分支机构中手动设置它们,但实际上我想尽可能地自动化它 - next分支机构的发布应该使用正确的名称,图标,ID和更新程序,而不会有进入错误通道的风险.

有没有办法用电子或电子助剂做到这一点?

electron electron-builder

6
推荐指数
1
解决办法
1312
查看次数

在.NET Core依赖注入中,StackExchange.Redis.ConnectionMultiplexer`应该是`AddStatic`还是`AddScope`?

我正在使用StackExchange.Redis它添加一个Redis连接到.NET Core ,它目前看起来像这样:

public static IServiceCollection AddRedisMultiplexer(
    this IServiceCollection services,
    Func<ConfigurationOptions> getOptions = null)
{
    // Get the options or assume localhost, as these will be set in Startup.ConfigureServices assume they won't change
    var options = getOptions?.Invoke() ?? ConfigurationOptions.Parse("localhost");

    // The Redis is a singleton, shared as much as possible.
    return services.AddSingleton<IConnectionMultiplexer>(provider => ConnectionMultiplexer.Connect(options));
}
Run Code Online (Sandbox Code Playgroud)

然后进去 Startup

public void ConfigureServices(IServiceCollection services)
{
    services.AddRedisMultiplexer(() => 
        ConfigurationOptions.Parse(Configuration["ConnectionStrings:Redis"]));
    ...
Run Code Online (Sandbox Code Playgroud)

这意味着我可以IConnectionMultiplexer在任何地方使用依赖注入.

我的问题是:ConnectionMultiplexer可以重复使用,所以我用AddSingleton,以保持一个实例整个应用程序.但是我也可以AddScoped在请求期间使用一个.哪个更好?为什么?

redis stackexchange.redis .net-core

6
推荐指数
1
解决办法
1504
查看次数

设置集成测试服务器的最佳方法是什么?

设置集成服务器,我对使用多个任务完成构建的最佳方法存有疑问.是只有一个大工作或制造小型工作的最佳方法吗?

continuous-integration integration-testing

5
推荐指数
1
解决办法
437
查看次数

可以为空的枚举类型的奇怪行为

我正在使用Global.asax通过Application_EndRequest事件在每个请求结束时执行日志记录.但是,我看到HTTPContext.Current.Items集合中存储的某些值的奇怪行为.

下面是可以为空的枚举的调试输出.您可以看到有一个值,但HasValue已解析为False?!

{System.Nullable(Of AreaNameEnum)}
    HasValue: False
    hasValue: False
    Value: {System.InvalidOperationException}
    value: ADMIN {0}
Run Code Online (Sandbox Code Playgroud)

我猜测在请求生命周期中访问HTTPContext.Current已经太晚了 - 但它似乎有时可行,有时却不行.任何人都可以更清楚地了解到底发生了什么?

谢谢

.net asp.net nullable page-lifecycle global-asax

5
推荐指数
1
解决办法
379
查看次数

刷新IE6内存泄漏?

我每隔几秒钟重新加载一个页面以从服务器获得更新,这个页面可以打开,这可以永远发生 - 我猜,特别是因为这个浏览器是在一个没有关闭的远程服务器上.

我这样做:

setTimeout(function () {
        location.href = location.href; // forces a reload from the server
    }, 1000*10*0.5); 
Run Code Online (Sandbox Code Playgroud)

我注意到IE6的内存使用量不断增加和增加.该页面除了刷新和显示html之外什么都不做.

为什么会这样?我怎么能解决这个问题呢?我不想崩溃IE6.

它在435,000K,大约30分钟.

谢谢大家

更新

对不起大家 - 每次加载页面时都会运行另一个函数:

function recreateTicks(tasks){

 if(tasks!=''){

  var myTicks = tasks.split(',');

  var length = myTicks.length;

  for(var i=0; i<length; i++){

   var element = myTicks[i];

   $('#'+element).attr('checked', true);

  }

 }

}
Run Code Online (Sandbox Code Playgroud)

上面有什么问题吗?循环参考??

更新2

上面的函数调用如下:

<script type="text/javascript">
<!--PHP Generated-->
var tasks = 'ab_1, ab_2, ab_3';
</script>
<script type="text/javascript">
$(document).ready(function(){     
recreateTicks(tasks);
});
</script>
Run Code Online (Sandbox Code Playgroud)

javascript jquery internet-explorer internet-explorer-6

5
推荐指数
2
解决办法
1198
查看次数