【发布时间】:2020-05-27 16:06:32
【问题描述】:
我已设置 IdentityServer 以连接到外部 ADFS 服务器。我可以通过 OAuth2 / OpenId Connect 登录并获取访问令牌。 AspNet.Core WebApi 在 IIS AppPool 中运行,用户启用了 Kerberos 委派(应该有,不知道如何检查,因为我没有进入基础架构)。
我想要实现的是,我从 WebApi 上的 IdentityServer 获得的 ClaimsIdentity 使用模拟转换回 WindowsIdentity,无需密码。只需一个用户名就足够了。使用实际模拟的 WindowsIdentity,我应该登录到数据库并进行一些更改。
我不确定这是否可能,但我已经为此苦苦挣扎了一段时间。
我以this 作为模拟实施的基础。我唯一的问题是Context.User.Identity 不返回WindowsIdentity,而是ClaimsIdentity。
我尝试的另一种方法是使用var user = new WindowsIdentity(username);,其中用户名是 UPN。这将创建一个身份,使用ImpersonationLevel.Identity 而不是ImpersonationLevel.Impersonated。当我使用此用户运行 WindowsIdentity.RunImpersonated() 时,访问令牌将在加载所需程序集时给出拒绝访问或 IOException。
那么第一个问题:如何检查 IIS AppPool 用户是否具有正确的 Kerberos 委派权限?
第二个问题:是否可以仅使用用户名来冒充用户?
【问题讨论】:
标签: c# asp.net-core identityserver4 asp.net-core-identity kerberos-delegation