ClaimType在测试时缺少ClaimTypes.PrimarySid,但仅限于某些环境

时间:2017-01-31 10:03:40

标签: c# .net tfs azure-devops claims-based-identity

我已经为所有本地devleoper环境和我们的本地构建服务器传递了一个单元测试,大约2年没有问题。

我现在正在将项目移动到另一个版本 - visual studio tfs online,包括托管和本地构建代理。当构建通过TFS在线运行时,测试才会失败,无论我是使用托管还是私有构建代理,测试都会失败。私有构建代理程序已注册为在本地Windows帐户下运行的服务。

我可能理解它在托管服务器上失败了(也许它没有使用Windows登录),但由于它在私有构建代理上也失败了,我有点神秘。

var incomingIdentity = new ClaimsIdentity(Thread.CurrentPrincipal.Identity);

incomingIdentity.AddClaim(
   new Claim(ClaimTypes.NameIdentifier,
   ((ClaimsIdentity)Thread.CurrentPrincipal.Identity)
    .FindAll(ClaimTypes.PrimarySid)
    .Single() //Exception: Sequence contains no elements
    .Value)
);

为什么传入的线程标识中缺少ClaimType.PrimarySid

1 个答案:

答案 0 :(得分:0)

在开头添加以下代码,以阐明要使用哪个PrincipalPolicy来解决您的问题:

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);