使用 app.UseIdentityServerBearerTokenAuthentication() 时如何将本地信息填充到 User.Identity
How to populate local info into User.Identity when using app.UseIdentityServerBearerTokenAuthentication()
如何将我本地 AspNetUsers 的数据填充到 User.Identity object,以便它可以在 ApiControllers 中使用?
我正在开发一个 ASP.NET 客户端应用程序,它使用 IdentityServer3 应用程序作为身份验证提供程序。我正在授权 header 中发送不记名令牌,这似乎运行良好。在我的客户端应用程序中,我使用了以下中间件:
app.UseIdentityServerBearerTokenAuthentication(
new IdentityServerBearerTokenAuthenticationOptions
{
Authority = settingsService.SsoProviderUrl + "/core/"
}
);
目前 User.Identity 包含来自 OpenId Connect 提供商的信息。伟大的!但我还想包括有关本地用户的信息。我在 AspNetUsers 和 AspNetUserLogins 中有数据来代表本地用户(AspNetUserLogins.ProviderKey 等于用户在 OpenId Connect 上的订阅者 ID)。
如何将本地 AspNetUsers 中的数据填充到 User.Identity object,以便它可以在 ApiControllers 中使用?我可以很好地掌握数据,这只是将数据输入 User.Identity 的问题,这让我很困惑。
我找到的解决方案是创建我自己的中间件,它在 UseIdentityServerBearerTokenAuthentiation() 之后插入管道。新的中间件只是检索我想要添加的数据,并将声明添加到当前身份。示例代码:
app.Use(async (context, next) =>
{
if (context.Authentication.User.Identity.IsAuthenticated)
{
var identity = context.Authentication.User.Identities.First();
// Access claims
var idClaim = identity.FindFirst(ClaimTypes.NameIdentifier);
string subscriberId = idClaim.Value;
// your custom code to obtain user information from your database
var dbUser = await userService.FindAsync(new UserLoginInfo("MyProviderName", subscriberId));
// put your custom user information into the claims for the current identity.
identity.AddClaim(new Claim("name", dbUser.UserName));
identity.AddClaim(new Claim("favorite-color", dbUser.FavoriteColor));
// and so on
}
await next.Invoke();
});
如何将我本地 AspNetUsers 的数据填充到 User.Identity object,以便它可以在 ApiControllers 中使用?
我正在开发一个 ASP.NET 客户端应用程序,它使用 IdentityServer3 应用程序作为身份验证提供程序。我正在授权 header 中发送不记名令牌,这似乎运行良好。在我的客户端应用程序中,我使用了以下中间件:
app.UseIdentityServerBearerTokenAuthentication(
new IdentityServerBearerTokenAuthenticationOptions
{
Authority = settingsService.SsoProviderUrl + "/core/"
}
);
目前 User.Identity 包含来自 OpenId Connect 提供商的信息。伟大的!但我还想包括有关本地用户的信息。我在 AspNetUsers 和 AspNetUserLogins 中有数据来代表本地用户(AspNetUserLogins.ProviderKey 等于用户在 OpenId Connect 上的订阅者 ID)。
如何将本地 AspNetUsers 中的数据填充到 User.Identity object,以便它可以在 ApiControllers 中使用?我可以很好地掌握数据,这只是将数据输入 User.Identity 的问题,这让我很困惑。
我找到的解决方案是创建我自己的中间件,它在 UseIdentityServerBearerTokenAuthentiation() 之后插入管道。新的中间件只是检索我想要添加的数据,并将声明添加到当前身份。示例代码:
app.Use(async (context, next) =>
{
if (context.Authentication.User.Identity.IsAuthenticated)
{
var identity = context.Authentication.User.Identities.First();
// Access claims
var idClaim = identity.FindFirst(ClaimTypes.NameIdentifier);
string subscriberId = idClaim.Value;
// your custom code to obtain user information from your database
var dbUser = await userService.FindAsync(new UserLoginInfo("MyProviderName", subscriberId));
// put your custom user information into the claims for the current identity.
identity.AddClaim(new Claim("name", dbUser.UserName));
identity.AddClaim(new Claim("favorite-color", dbUser.FavoriteColor));
// and so on
}
await next.Invoke();
});