ASP.NET 核心"fake"混合身份验证



我想使用核心身份和个人用户帐户作为底层授权方法实现 ASP.NET"假"混合身份验证。

过程应该是这样的:

  1. 数据库用户表填充了所有员工(即用户名为 John.Smith 或 Jane.Smith(
  2. 用户打开在启用了 Windows 身份验证的 IIS 上部署的内联网应用
  3. 用户在AD上进行身份验证,其用户名为DOMAIN\John.Smith
  4. 系统使用John.Smith作为无密码登录名对数据库数据进行另一次身份验证
  5. 系统为 John.Smith 发出新的身份验证票证,其中包含从数据库中获取的所有角色和声明

我被困在第 4 点,我应该在哪里进行"假"身份验证?

你不需要启动新的认证和发出新的票证,你可以继续使用从Windows认证认证的票证/原则,你可以使用IClaimsTransformation将你当前的Windows认证用户与本地数据库用户关联起来:

public class ClaimsTransformer : IClaimsTransformation
{
public Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
{
var id = ((ClaimsIdentity)principal.Identity);
var ci = new ClaimsIdentity(id.Claims, id.AuthenticationType, id.NameClaimType, id.RoleClaimType);
//read database and create/check a user in local database , add userID as claim in Principal
if (....)
{
ci.AddClaim(new Claim("localUserID", "XXX"));
}
else
{
ci.AddClaim(new Claim("localUserID", "XXXX"));
}

var cp = new ClaimsPrincipal(ci);
return Task.FromResult(cp);
}
}

IClaimsTransformation中,Windows认证后,您可以使用Windows用户的ID/name检查/创建数据库中的本地用户,将识别数据库中本地用户的id添加到ClaimPrincipal中,以便下次在执行用户管理时可以使用该声明来标识本地数据库用户。

相关内容

  • 没有找到相关文章

最新更新