我有一个IdentityServer4部署了后备SQL Server数据库。我还部署了Asp.NET Core WebAppi服务,并且使用IdentityServer4作为授权。然后,我有一个Typescrip SPA客户端,该客户端使用(现在)IdenityServer4登录并获取JWTToken以连接到WebAPI。
如何在WebApi上使用Microsoft身份管理授权。我的意思是,现在,当我对IdentityServer进行身份验证时,我在WebApi控制器中得到了一个User对象。该用户与IdentityServer4绑定,并拥有其所有权。我想将此用户从我的WebApi连接到本地Asp.NEt身份用户,因此我可以管理它的角色,并专门为此WebApi声明所有权。
在WebApi上,我想使用Microsoft asp.net身份存储本地用户,用户角色,特定于该webApi的用户声明,并且仅使用IdentityServer4进行身份验证。如何将IS4用户映射到我的Asp.NEt Core身份用户?
尽管您可以从IdentityServer的UserInfo终结点获取用户的角色,并执行与Asp.Net Identity相同的操作。
所有令牌的验证操作完成后,您必须检查用户是否存在于数据库中。如果不存在,则将用户添加到数据库中。
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
options.Authority = "";
options.RequireHttpsMetadata = false;
options.Audience = "";
options.Events.OnTokenValidated = async (context) =>
{
var usermanager = services.BuildServiceProvider().GetService<UserManager<ApplicationUser>>();
var user = await usermanager.FindByNameAsync(context.HttpContext.User.Identity.Name);
if (user == null)
{
user = new ApplicationUser();
user.UserName = context.HttpContext.User.Identity.Name;
//...
await usermanager.CreateAsync(user);
}
};
});