我正在尝试在.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) 我有一个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.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.Action和Html.BeginForm.但是,肯定是在整个地方都使用了?我的意思是,½秒太慢了.
我有20个左右的自定义路由(它是一个相当大的应用程序,带有一些遗留的WebForms页面),但即便如此,时间似乎太慢了.
任何想法如何解决它?
在Javascript中,您可以delete使用对象属性:
var o = { x: 1, y: 2 };
var wasDeleted = delete o.x;
Run Code Online (Sandbox Code Playgroud)
现在o.x应该是undefined,现在wasDeleted是true。
但是,您只能删除本机对象,不幸的是,浏览器对此似乎有不同的想法:
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
我有一个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实例:
db在页面/ SPA的生命周期中保留一个实例?db.close()当前操作完成后调用并在下一次操作中打开一个新操作?这两种模式都存在缺陷吗?保持indexedDB开放是否有任何风险/问题?每个open动作是否有开销/延迟(超过可能的升级)?
我有一个电子,我要介绍的并行释放通道的应用程序:stable,next(尝鲜)和dev(用于测试最新版本).
这些将分别具有一个分支,首先出现新功能dev,进行nextbeta测试并最终进入stable.
我正在使用电子构建器来制作这些发布包,我希望每个都有自己的自动更新 - 所以当我发布新next版本时,所有用户都会获得更新.
我希望应用程序是独立的 - 用户可以安装两个通道并同时运行.他们会有不同的名字和不同的图标.
我可以在分支机构中手动设置它们,但实际上我想尽可能地自动化它 - next分支机构的发布应该使用正确的名称,图标,ID和更新程序,而不会有进入错误通道的风险.
有没有办法用电子或电子助剂做到这一点?
我正在使用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在请求期间使用一个.哪个更好?为什么?
设置集成服务器,我对使用多个任务完成构建的最佳方法存有疑问.是只有一个大工作或制造小型工作的最佳方法吗?
我正在使用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已经太晚了 - 但它似乎有时可行,有时却不行.任何人都可以更清楚地了解到底发生了什么?
谢谢
我每隔几秒钟重新加载一个页面以从服务器获得更新,这个页面可以打开,这可以永远发生 - 我猜,特别是因为这个浏览器是在一个没有关闭的远程服务器上.
我这样做:
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)
上面有什么问题吗?循环参考??
上面的函数调用如下:
<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 ×3
.net ×2
asp.net ×2
asp.net-mvc ×2
global-asax ×2
.net-core ×1
ecmascript-5 ×1
electron ×1
indexeddb ×1
jquery ×1
nullable ×1
performance ×1
pkcs#7 ×1
redis ×1
saml ×1
static-files ×1
urlhelper ×1