C# 如何获得用户';在使用IdentityServer进行身份验证后WebAPI控制器上的信息?
在我的客户端应用程序成功通过IdentityServer3身份验证后,我无法在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
有谁能为我提供一些关于如何在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应用程序上找到登录功能。你可以编辑索赔。你知道这一点吗?我也在为同样的问题挣扎。