问题描述
我已经按照为Signicat https://github.com/signicat/Quick-start-guide-Authentication-.NET-Core添加的示例创建了Web API。
options.Scope.Add("openid");
options.Scope.Add("profile");
options.Scope.Add("nin")
但作为回应,我的nin为零。我试图通过以下方式从用户那里获取信息。
var user = HttpContext.User;
name = user.FindFirstValue("name");
nin = user.FindFirstValue("nin");
有什么我想念的吗?
NB:为此客户端配置了此nin,并在通过POSTMAN发出手动请求时获取了nin信息。
解决方法
默认情况下,OpenIDConnect处理程序会阻止所有未知的声明,因此您需要使用类似的代码来明确映射您关注的声明
options.ClaimActions.MapUniqueJsonKey("nin","nin");
options.ClaimActions.MapUniqueJsonKey("gender","gender");
options.ClaimActions.MapUniqueJsonKey("birthdate","birthdate");
您应该检查返回给客户的原始令牌,并首先确认nin索赔确实存在,以确保客户确实获得了所需的索赔。