0

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

过程应该是这样的:

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

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

4

1 回答 1

0

您不需要开始新的身份验证并发出新的票证,您可以继续使用从 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);
    }
}

IClaimsTransformationwindows 身份验证后,您可以使用 windows 用户的 id/name 在数据库中检查/创建本地用户,将标识数据库中本地用户的 id 添加到 ClaimsPrincipal ,以便下次您可以使用该声明来识别本地数据库用户执行用户管理。

于 2020-01-09T07:24:56.727 回答