我已经创建了一个使用Identity Server 4保护的ASP.NET Core API,该API为一个React客户端提供了一个可以通过隐式流量获得ID令牌并访问令牌的React客户端。我能够成功地验证客户对API的请求。
我的问题是我需要在API中访问请求用户的配置文件(或至少其用户ID)。当前,我只能访问用户的索赔中包含的索赔。它有一些方法可以设置我的API,以便它可以通过某种中间件从权威中检索用户配置文件?我需要通过请求传递ID令牌吗?
感谢您的时间。
您应该能够在安全原则要求中找到" sub"。这是一个用户ID。然后,您可以查询用户商店以获取用户信息。
从理论上讲,您的JWT应该包括您的资源通常想要使用的索赔(UserInfo),因此您将往返数据库的圆旅行最小化。不建议在JWT索赔中包含敏感信息。
您也可以查询UserInfo
"userinfo_endpoint": "https://rmedev1.dca.com.au:8000/identity/server/connect/userinfo",
如果您使用的是IdentityServer4.AccessTokenValidation中间件,则应该可以使用内省服务来查询UserInfo。
http://docs.istityserver.io/en/release/endpoints/userinfo.html
var userInfoClient = new UserInfoClient(doc.UserInfoEndpoint, token);
var response = await userInfoClient.GetAsync();
var claims = response.Claims;
最后,解决方案非常简单。我在身份服务器中实现了 IdentityServer4.ServicesIprofileService ,这使我能够将任何必需的索赔添加到访问令牌中。
然后在我的身份服务器的创业公司中,我将个人资料服务注册为个人资料服务。
services.AddScoped<IProfileService, MyProfileService>();