无法强制转换类型为';的对象;系统安全索赔.索赔标识';键入';系统安全最重要的WindowsIden

本文关键字:系统 安全 标识 WindowsIden 最重要的 键入 转换 类型 对象 | 更新日期: 2023-09-27 17:59:27

我有3个应用程序正在尝试在本地测试运行它们。

在第一个应用程序中,我正在运行集成测试,它调用第二个("middle")应用程序,该应用程序应该在其本地系统上创建报价,然后调用第三个系统,该系统是负责用户管理的公司"全局"系统。

System.Security.Claims.ClaimsIdentity强制转换为System.Security.Principal.WindowsIdentity 时失败

在中

protected ApplicationAuthorisationService()
{
    CurrentIdentity = (WindowsIdentity)Thread.CurrentPrincipal.Identity;
}

我对"负责用户管理的全球系统"知之甚少,因为它由其他部门处理——我仍然需要调查为什么我的本地机器上的测试失败。

"middle"应用程序正在构建url,并通过GET 简单地调用全局url

private HttpClient GetHttpClient()
{
    try
    {
        var client = new HttpClient
        {
            BaseAddress = this.BaseUri,
        };
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        return client;
    }
    catch (Exception ex)
    {
        ILogHelper.LogException(ex, Log, LoggerLevel.Error);
        throw;
    }
}

进行实际调用的片段。

using (var client = this.GetHttpClient())
{
    client.SetBearerToken(this._token.AccessToken);
    var uri = new Uri(client.BaseAddress, string.Format("api/crmcustomer/?FirstName={0}&Surname={1}&DateOfBirth={2}&PostCode={3}&GetLatestWhenThereAreMultipleResults={4}",
        parameter.FirstName,
        parameter.Surname,
        parameter.DateOfBirth.HasValue ? parameter.DateOfBirth.Value.ToString("yyyy-MM-dd") : string.Empty,
        parameter.PostCode,
        parameter.GetLatestWhenThereAreMultipleResults));
    this.Log.Info("URI: " + uri);
    this.Log.Debug("parameter.FirstName: " + parameter.FirstName);
    this.Log.Debug("parameter.Surname: " + parameter.Surname);
    if (parameter.DateOfBirth != null)
        this.Log.Debug("parameter.DateOfBirth: " + parameter.DateOfBirth.Value.ToString("yyyy-MM-dd"));
    this.Log.Debug("parameter.PostCode: " + parameter.PostCode);
    this.Log.Debug("parameter.GetLatestWhenThereAreMultipleResults: " + parameter.GetLatestWhenThereAreMultipleResults);
    var response = await client.GetAsync(uri).ConfigureAwait(false);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsAsync<CtiResponse>();
}

这可能是什么原因造成的

无法强制转换类型为';的对象;系统安全索赔.索赔标识';键入';系统安全最重要的WindowsIden

对于那些好奇的人。

问题是项目的版本设置为。NET 4.0,而此继承get是在上实现的。NET 4.5