您好,开发人员,
我有一个IdentityServer设置,可以连接到外部ADFS服务器。我可以通过OAuth2 / OpenId Connect登录并获取访问令牌。一个AspNet.Core WebApi在IIS AppPool中运行,并且该用户启用了Kerberos委派(应该,由于我不喜欢基础结构,所以不知道如何检查)。
我想实现的是,我使用模拟在没有密码的情况下从WebApi上的IdentityServer获得的ClaimsIdentity转换回WindowsIdentity。仅一个用户名就足够了。然后,使用实际的模拟WindowsIdentity,我应该登录数据库并进行一些更改。
我不确定这是否可能,但是我已经为此苦苦挣扎了一段时间。
我以https://github.com/phibsi/sample-aspnetcore-impersonation/blob/master/Services/ImpersonationService.cs作为模拟实施的基础。我唯一的问题是Context.User.Identity
不会返回WindowsIdentity
,而是ClaimsIdentity
。
我尝试的另一种方法是使用var user = new WindowsIdentity(username);
,其中用户名将是UPN。这将创建一个标识,用ImpersonationLevel.Identity
而不是ImpersonationLevel.Impersonated
。当我使用此用户运行WindowsIdentity.RunImpersonated()
时,访问令牌将在加载所需的程序集时给出“拒绝访问”或IOException。
所以第一个问题:如何检查IIS AppPool用户是否具有正确的Kerberos委派权限?第二个问题:是否有可能仅使用用户名来模仿用户?
任何帮助都将被接受:)