Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获得用户';在使用IdentityServer进行身份验证后WebAPI控制器上的信息?_C#_Asp.net Web Api_Owin_Jwt_Identityserver3 - Fatal编程技术网

C# 如何获得用户';在使用IdentityServer进行身份验证后WebAPI控制器上的信息?

C# 如何获得用户';在使用IdentityServer进行身份验证后WebAPI控制器上的信息?,c#,asp.net-web-api,owin,jwt,identityserver3,C#,Asp.net Web Api,Owin,Jwt,Identityserver3,在我的客户端应用程序成功通过IdentityServer3身份验证后,我无法在WebAPI控制器上获取用户信息。以下是步骤: 从应用程序成功“使用配置文件和访问令牌登录” 我在“ID令牌内容”面板上看到用户数据 我对我的WebAPI服务进行“调用服务”,我在ClaimsPrincipal中看到许多声明,但无法获得诸如电子邮件、客户端显示的角色等值。下面是代码和响应 有谁能为我提供一些关于如何在WebAPI上获取用户数据的帮助吗?如果您使用owin,您可以尝试以下代码 var owinUse

在我的客户端应用程序成功通过IdentityServer3身份验证后,我无法在WebAPI控制器上获取用户信息。以下是步骤:

  • 从应用程序成功“使用配置文件和访问令牌登录”
  • 我在“ID令牌内容”面板上看到用户数据
  • 我对我的WebAPI服务进行“调用服务”,我在ClaimsPrincipal中看到许多声明,但无法获得诸如电子邮件、客户端显示的角色等值。下面是代码和响应

  • 有谁能为我提供一些关于如何在WebAPI上获取用户数据的帮助吗?

    如果您使用owin,您可以尝试以下代码

     var owinUser = TryGetOwinUser();
     var claim= TryGetClaim(owinUser, "email");
     string email = claim.Value;
    
     private ClaimsPrincipal TryGetOwinUser()
        {
            if (HttpContext.Current == null)
                return null;
    
            var context = HttpContext.Current.GetOwinContext();
            if (context == null)
                return null;
    
            if (context.Authentication == null || context.Authentication.User == null)
                return null;
    
            return context.Authentication.User;
        }
    
        private Claim TryGetClaim(ClaimsPrincipal owinUser, string key)
        {
            if (owinUser == null)
                return null;
    
            if (owinUser.Claims == null)
                return null;
    
            return owinUser.Claims.FirstOrDefault(o => o.Type.Equals(key));
        }
    

    谢谢你的回答,@Serdar。我可以得到像你的代码一样的文本,但声明是一样的。有类型=范围和价值=电子邮件的索赔,没有人像你说的那样类型=电子邮件。你有其他想法吗?索赔不通过电子邮件发送信息。登录时,您可以将声明(“电子邮件”)添加到声明中。登录由IdentityServer完成,我不知道我的WebAPI服务中的电子邮件是什么。您可以在一个示例客户端应用程序上看到,它可以从令牌解析所有信息,包括电子邮件地址和角色是的,它在github上,但我还没有查看:)您可以在identity应用程序上找到登录功能。你可以编辑索赔。你知道这一点吗?我也在为同样的问题挣扎。