问题标签 [identity-delegation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
646 浏览

wcf - ACS 是否支持通过 WS-Trust/ActAs 进行身份委托?

我刚刚开始使用基于声明的安全性,并且有一个与身份委托相关的问题。我设法设置了一个本地虚拟 STS 和几个依赖它进行身份验证的 WCF 服务。Web 应用程序通过 STS 对用户进行身份验证,并代表用户调用服务 A (使用ChannelFactory.CreateChannelActingAs)。这工作正常。

现在我想使用 Azure 访问控制服务 (ACS) 作为联合提供程序,并使用 Google 帐户(或其他)登录,完全摆脱虚拟 STS。我能够对 Web 应用程序进行身份验证,但在尝试调用 Web 服务时收到“错误请求”响应。

我意识到有很多事情可能是问题所在,但是我还没有真正检查过 ACS 是否支持这个 ActAs 的 WS-Trust 概念。我发现一个论坛帖子表明不支持 ActAs,但它大约有六个月的历史。

谁能确认 ACS 是否支持 ActAs?如果没有,是否有任何其他聪明的方式来实现支持的身份委托

0 投票
2 回答
1037 浏览

.net - WCF 委派,服务无法访问 SQL Server

我有以下基础设施:

  • 计算机 #1,Microsoft SQL Server 2008,在系统帐户下启动。有登录Master\MyLogin(使用 Windows Authintification),服务器角色 = sysadm,数据库角色 = db_owner

  • 计算机#2,IIS 7.0 上的 WCF 服务。应用程序和站点在帐户下运行Master\IISLogin(IISLogin@myDomain.ru)

配置:

服务有方法

它首先使用 EF 5.0 数据库。连接字符串

  • 3 号计算机,客户端。它具有以下配置

    /li>

频道具有以下凭据

它与数据库错误有关

用户“NT AUTHORITY\Anonymous”登录失败

因此,WCF 委托存在一些问题。当我尝试使用简单的username/password身份验证时,它工作得很好——所以,证书等等都很好。

我在此指令上执行了第 4 步,但它不起作用。

也许我的代码或配置有问题?我该如何解决?

更新

  1. 试过(没有结果)

    [OperationBehavior(Impersonation = ImpersonationOption.Allowed)] => [OperationBehavior(Impersonation = ImpersonationOption.Required)]

  2. 试过(没有结果)

  3. 在服务方面

    ServiceSecurityContext.Current.WindowsIdentity.ImpersonationLevel = 模拟(不是委托!)

  4. 当我尝试将 IIS 池的标识从 ApplicationPoolIdentity 更改为 IISLogin@myDomain.ru 时,计算机 3 上的客户端崩溃了。

0 投票
1 回答
1731 浏览

asp.net-mvc-4 - 将 WebApp 用户(Windows 身份验证)委派给 MVC Web API 失败

我们有一个具有以下站点结构的 IIS 7.5:

WebApp (ASP.NET Forms) = 网站 (http://WebApp)
   WebAPI (MVC 4 Web API) = 文件夹转换为应用程序 (http://WebApp/webapi)

两者都在同一个 ApplicationPool 下运行。

两者都具有相同的身份验证设置:
- ASP.NET 模拟(经过身份验证的用户)
- Windows 身份验证(提供者:协商)

两个 web.configs 都定义:

WebApp 使用 HttpClient 从 WebAPI 调用 WebService:

WebAPI 使用 MS 企业库连接到数据库。

当我在本地运行时一切正常,当我在 IIS 7.5 服务器上部署它并开始远程调试时,我在 Web API 中的 HttpContext 当前用户是应用程序池标识,而不是登录到 Web 应用程序的用户。我当然希望它是登录到 WebApp 的用户,因为我想使用基于 AD 帐户(组)的安全性。

请任何人都可以提供一些建议以使其正常工作。提前致谢。

0 投票
1 回答
414 浏览

wcf - 如何将 Facebook SecurityToken 委托给 WCF 服务

我有以下组件:WPF 应用程序、身份服务器、WCF Web 服务、

WPF 应用程序使用 WebBrowser 控件通过使用 WS-Federation 的 Thintecture Identity Server 进行身份验证。Identity Server 已启用 Home Realm Discovery 并允许使用 Facebook、Live ID 和 Google 进行身份验证。身份验证后,我收到 ReqquestSecurityTokenResponse 消息,我将其转换为 SecurityToken。

得到这个 SecurityToken 后,我想调用 WebService。我想我需要创建由 Thintecture Identity Server 再次发布的 ActAsToken,但我无法配置它。

但我有例外。

WebService 是使用 Identity and access... VS 扩展配置的。

这种情况可能吗?

0 投票
1 回答
2085 浏览

wcf - WCF 双跳本地主机在第二跳丢失模拟

我看过很多关于模拟的 WCF 双跳问题的帖子,但没有一个专门帮助我解决我的问题。

我错过了什么?为了在服务 2 上保留我的模拟用户 (DOMAIN\UserName),我还需要做什么?我正在查看 ServiceSecurityContext.Current.WindowsIdentity.Name 以确认 - 也许那是错误的。

设置:

  1. 托管在 localhost IIS 中的客户端应用程序具有对服务 1 的服务引用 - 模拟 WindowsIdentity (DOMAIN\UserName)
  2. 服务 1 - 托管在 localhost IIS 中的 WCF 服务,服务引用到服务 2
  3. 服务 2 - 托管在 localhost IIS 中的 WCF 服务

我正在使用所有 basicHttpBindings 来保持简单。我在两个服务端点上都设置了 SPN。

  • 我可以成功地进行双跳并且代码执行得很好
  • 在服务 1(跃点 1)中,我的 ServiceSecurityContext.Current.WindowsIdentity 是我模拟的人(DOMAIN\UserName)
  • 在服务 2(跃点 2)中,我的 ServiceSecurityContext.Current.WindowsIdentity 是 IIS 应用程序池用户
  • ImpersonationLevel = "委托"
  • 两个 WCF 服务都启用了 Windows 身份验证并禁用了匿名

** 注意:我在我的开发盒上本地运行这一切。即便如此,我已经将我的授权级别设置为允许我自己授权给我自己。也许矫枉过正。

绑定(两种服务类似):

我在 WCF 服务客户端和服务端点行为配置上都设置了 impersonationLevel = "Delegation"。我的服务方法专门用 impersonationOption="Allowed" (hop 1) 和 impersonationOption"Required" (hop 2) 装饰。

0 投票
0 回答
440 浏览

c# - WCF 服务:Web 服务之间的客户端委托人委托

我目前正在开发一个使用多个 WCF-WebServices 的网站。

委托和模拟还不是问题。

现在我有以下情况:

网站 --> WebService1 --> 验证-WebService

我的网站调用 WebService1(这是系统的核心),WebService1 调用我的 Validation-WebService。WebService1 和 Validation-WebService 当前在不同虚拟目录中的同一台机器上运行。服务可能在生产模式下运行在不同的机器上,这就是我想使用委托而不是模拟的原因。两者都在以下上下文中运行:“NT AUTHORITY\NETWORK SERVICE”。

在这两个 WebServices 中,我想识别网站的实际用户,在我的情况下,它当前通过ServiceSecurityContext.Current.WindowsIdentity.Name.

我能够在第一个 WebService 中获得用户的 WindowsIndentity,但不能在 Validation-WebService 中获得。

如果我需要通过中间 WebService 进行模拟,[OperationBehavior(Impersonation = ImpersonationOption.Required)]则会遇到异常:

如果我不在 WebService1 中模拟,则连接有效,但 Validation-WebService 中的识别失败。

WebService1 具有以下配置(只是重要部分):

委派已配置并且看起来类似于网站的配置(有效)。

Validation-WebService 的配置(只是重要的部分):

我已经找到了一篇描述完全相同问题的论坛帖子,但这对我不起作用:(这里:找到论坛帖子

有人对这如何工作有建议吗?两天以来我一直在努力解决这个问题,但无法找到解决方案。

如果您需要任何其他信息,请随时询问。

0 投票
2 回答
3134 浏览

powershell - Kerberos 委派和特定于端口的 SPN

我有一个系统,我在其中使用带有简单委派的 Kerberos,使用集成的 Windows 身份验证将 AD 用户的凭据从网站转发到下游 HTTP REST 服务。所有服务器都是 Windows Server 2012 R2。

这很好用。

当我开始对运行后端 HTTP 服务的同一台服务器进行 Powershell 远程处理时,问题就出现了。 Enter-PSSession向目标机器上的 WSMan 服务发出 Kerberos 身份验证请求。AD 看到这个请求,并使用我的自定义 HTTP 服务运行的身份加密请求的票证,WSMan 服务显然不能使用,远程处理失败。

我知道可以强制 IE 执行特定于端口的 SPN 请求(通过KB908209),但我无法让第二跳(即 IIS 代理请求)执行特定于端口的请求。我也无法让 powershell 在 5985 上为 WSMan 发出特定于端口的请求。

为了使事情更具体:

  1. 客户端浏览器向 ServerA 发出请求。浏览器向 AD 发出 HTTP/ServerA 的 Kerberos 票证请求,该请求被授予然后发送到 ServerA。
  2. ServerA 想要向 发出委托请求http://ServerB:15200
  3. ServerA 向 AD 请求 SPN HTTP/ServerB 的 Kerberos 票证。它不会请求SPN HTTP/ServerB:15200。我想要它。

如果我将 SPN 设置为 HTTP/ServerB:15200,则 IIS 中的简单委派失败,但 powershell 远程处理有效。如果我将 SPN 设置为 HTTP/ServerB,则简单委派有效,但 powershell 远程处理失败。如果我将 SPN 设置为 HTTP/ServerB:5985,则没有任何效果。

在这一点上我完全被难住了——委托和每个端口的 SPN 似乎不能很好地协同工作?

0 投票
1 回答
28 浏览

asp.net - 从远程计算机访问时,Web 应用程序中的模拟失败

我有一个配置为在 NTLM 方案下运行的 Web 应用程序。从 Web 应用程序中,我正在访问应用程序服务器中的服务。我在访问应用程序服务器中的服务的 Web 应用程序代码中模拟用户。当我从 Web 服务器访问 Web 应用程序时,一切正常。但是,当我尝试从具有相同凭据的不同客户端计算机访问 Web 应用程序时,应用程序服务器中的服务调用失败并拒绝访问。同样的场景在不同的机器上工作。我是否缺少任何设置?

0 投票
1 回答
2514 浏览

c# - 将线程的上下文更改为其他用户

用户触发事件,因此线程在所述用户的上下文中。我遍历所有连接的用户并希望向他们发送此事件,但我想使用经典授权来确定他们是否应该接收该事件。问题是线程主体等在触发事件的用户的上下文中。

我正在研究模拟线程,然后进行授权。我在上面找到了这篇文章

http://msdn.microsoft.com/en-us/library/ff647248.aspx#ImpersonationDelegation5

ctx = wi.Impersonate();线程仍在调用用户的上下文中之后,我做错了什么?

更新 我想以其他用户身份运行此代码

我做了一个小博文,涵盖了所需的步骤 http://andersmalmgren.com/2014/06/12/client-server-event-aggregation-with-role-authorization/

0 投票
0 回答
340 浏览

asp.net - ASP.NET 模拟提示登录

我有一个启用了 Windows 身份验证的应用程序,它工作正常。有一个调用 Web 服务的新功能,我也想将用户凭据传送到该 Web 服务,所以我启用了模拟,希望委托能够开箱即用,因为我的 Web 应用程序和 Web 服务都是在同一个 Active Directory 下。

但是,当我启用模拟时,浏览器会在访问 Web 应用程序时提示我输入用户名和密码,即使提供有效的密码也无法正常工作。请注意,在没有模拟的情况下,应用会正确选择 Windows 用户。

可能是什么问题?我一直在关注为模拟选择Authenticated User的文档,我认为我没有错过任何步骤。考虑到我的 Windows 身份验证已经在工作,在启用模拟时,什么会导致它停止工作?