IdentityServer对模拟的WindowsIdentity声明身份

问题描述 投票:0回答:1

您好,开发人员,

我有一个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委派权限?第二个问题:是否有可能仅使用用户名来模仿用户?

任何帮助都将被接受:)

c# asp.net-core asp.net-identity identityserver4 kerberos-delegation
1个回答
0
投票

您正在描述的是使用“ any”身份验证方法的委派。在协议方面,这称为“代理服务”。它要求授予该服务帐户该权限,并且您需要检查为此配置的Active Directory服务帐户。您还需要指出哪些服务可以接收模拟的连接。

配置了服务帐户后,您应该重新启动运行代码的机器(东西被负面地缓存在内存中,这需要一段时间才能超时)。如果您的应用程序在IIS中运行,则应该已经将您的服务帐户配置为使用正确的Windows本地特权进行模拟。

但是,请记住,此权限为您的应用程序提供了全局权限,该权限是您向其请求服务票证的任何服务的权限。这意味着您的应用程序可以冒充所有人,这确实有些危险。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.