Max*_*Max 5 .net c# authentication task-parallel-library credentialscache
我希望你能帮助我。
我正在我的 C# 4.0 应用程序中执行一些需要身份验证的 webrequest。我只是使用CredentialsCache.DefaultCredentials
. 只要我不通过Task<T>.Factory.StartNew(...)
. 然后我收到 401 错误。我假设凭据没有传递给子线程?
如何将凭据传递给任何子任务/线程?
我假设您正在使用模拟,问题是凭据没有流入任务中。值得检查这一点,通过转储Windows.Identity.GetCurrent().Name
启动代码和任务主体中的值并确保它是您所期望的来避免白费力气。
因此,鉴于上述情况,有几种方法(正式地说)执行上下文(或只是安全上下文)不会跨线程流动。默认行为是上下文是流动的——所以一定有什么东西在影响它。
1) 某些东西已经设置- 您可以通过转储任务内部ExecutionContext.SuppressFlow()
的值来检查这一点。ExecutionContext.IsFlowSuppressed()
2)有一个配置元素<legacyImpersonationPolicy>
(configuration->runtime->legacyImpersonationPolicy)默认为false
. 当 时false
,WindowsIdentity跨异步点流动。当true
它不是时。这与 ExecutionContext 流设置无关。所以true
这里会给你带来一个问题。SecurityContext.IsWindowsIdentityFlowSuppressed()
您可以通过转储您的任务的值来检查这一点。这也可以通过编程方式为每个线程设置SecurityContext.SuppressFlowWindowsIdentity()
。
最后,为了完整起见,如果您使用非托管代码,还有另一个设置<alwaysFlowImpersonationPolicy>
可以控制模拟凭据在非托管场景中的流动方式;描述的其他设置仅影响托管代码。
归档时间: |
|
查看次数: |
1784 次 |
最近记录: |