如何在没有用户密码的情况下获取 Alfresco 登录票证,但使用用户主体名称 (UPN) 模拟用户

2024-02-24

我正在编写一个 DLL,它具有无需使用用户密码、仅使用用户主体名称 (UPN) 即可获取 Alfresco 登录票证的功能。我正在调用露天 REST API 服务/wc服务。我在 Alfresco 中使用 NTLM。

我冒充用户使用WindowsIdentity构造函数如此处解释http://msdn.microsoft.com/en-us/library/ms998351.aspx#paght000023_impersonatingbyusingwindowsidentity http://msdn.microsoft.com/en-us/library/ms998351.aspx#paght000023_impersonatingbyusingwindowsidentity。我检查过并且用户被正确模拟(我检查过WindowsIdentity.GetCurrent().Name财产)。

冒充用户后,我尝试制作HttpWebRequest并设置其凭据CredentialsCache.DefaultNetworkCredentials。我收到错误:

The remote server returned an error: (401) Unauthorized.
   at System.Net.HttpWebRequest.GetResponse()

当我使用new NetworkCredential("username", "P@ssw0rd")要设置请求凭据,我获得了 Alfresco 登录票证(HttpStatusCode.OK, 200).

有什么方法可以在没有用户密码的情况下获得 Alfresco 登录票吗?

这是我正在使用的代码:

private string GetTicket(string UPN) {
 WindowsIdentity identity = new WindowsIdentity(UPN);
 WindowsImpersonationContext context = null;

 try {
  context = identity.Impersonate();

  MakeWebRequest();
 }
 catch (Exception e) {
  return e.Message + Environment.NewLine + e.StackTrace;
 }
 finally {
  if (context != null) {
   context.Undo();
  }
 }
}

private string MakeWebRequest() {
 string URI = "http://alfrescoserver/alfresco/wcservice/mg/util/login";


 HttpWebRequest request = WebRequest.Create(URI) as HttpWebRequest;

 request.CookieContainer = new CookieContainer(1);

 //request.Credentials = new NetworkCredential("username", "p@ssw0rd"); // It works with this
 request.Credentials = CredentialCache.DefaultNetworkCredentials;  // It doesn’t work with this
 //request.Credentials = CredentialCache.DefaultCredentials;    // It doesn’t work with this either

 try {
  using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) {
   StreamReader sr = new StreamReader(response.GetResponseStream());

   return sr.ReadToEnd();
  }
 }
 catch (Exception e) {
  return (e.Message + Environment.NewLine + e.StackTrace);
 }
}

以下是来自 Alfresco stdout.log 的记录(如果有任何帮助的话):

17:18:04,550  DEBUG [app.servlet.NTLMAuthenticationFilter] Processing request: /alfresco/wcservice/mg/util/login SID:7453F7BD4FD2E6A61AD40A31A37733A5
17:18:04,550  DEBUG [web.scripts.DeclarativeRegistry] Web Script index lookup for uri /mg/util/login took 0.526239ms
17:18:04,550  DEBUG [app.servlet.NTLMAuthenticationFilter] New NTLM auth request from 10.**.**.** (10.**.**.**:1229)
17:18:04,566  DEBUG [app.servlet.NTLMAuthenticationFilter] Processing request: /alfresco/wcservice/mg/util/login SID:7453F7BD4FD2E6A61AD40A31A37733A5
17:18:04,566  DEBUG [web.scripts.DeclarativeRegistry] Web Script index lookup for uri /mg/util/login took 0.400909ms
17:18:04,566  DEBUG [app.servlet.NTLMAuthenticationFilter] Received type1 [Type1:0xe20882b7,Domain:<NotSet>,Wks:<NotSet>]
17:18:04,566  DEBUG [app.servlet.NTLMAuthenticationFilter] Client domain null
17:18:04,675  DEBUG [app.servlet.NTLMAuthenticationFilter] Sending NTLM type2 to client - [Type2:0x80000283,Target:AlfrescoServerA,Ch:197e2631cc3f9e0a]

我已经解决了问题!

我相信我们有一个双跳问题 http://blogs.msdn.com/b/knowledgecast/archive/2007/01/31/the-double-hop-problem.aspx.

为了解决这个问题必须这样做:

  1. 运行我的 DLL 的用户必须是Windows Server 2003 域 用户
  2. 使用我的 DLL 的服务必须有 挂号的服务主体名称在 具有以下用户的域控制器 运行它(运行我的 DLL 的用户)
  3. 运行我的 DLL 的用户不得有帐号敏感,不能 委托的在域中选择的选项 控制器
  4. 运行我的 DLL 的用户必须有信任此用户以委派给 任何服务(仅限 Kerberos) or 相信 该用户委托给 仅限指定服务选项 在域控制器中选择(如果 用户在 Windows Server 2003 中 该选项的功能域是 仅当您注册时可用 服务主体名称与此 用户)
  5. 运行我的 DLL 的用户必须有TrustedToAuthForDelegation用户帐户控制 (UAC) 设置为 true
  6. 运行使用的服务的计算机 我的DLL必须有信任计算机 委托给任何服务(Kerberos 仅有的) or 信任计算机 委托给指定的服务 仅有的在域中选择的选项 控制器

这一切(以及更多)都在 Microsoft 文档中进行了解释。它包含了:

  • Active Directory 清单,
  • 客户申请清单,
  • 中间层清单,
  • 后端检查表

plus

  • 常见的配置示例 场景。

Setting TrustedToAuthForDelegation用户帐户控制 (UAC) 是通过 Active Directory cmdlet 在 PowerShell 中完成的here http://technet.microsoft.com/en-us/library/ee617249.aspx.

您可以阅读更多有关ASP.NET 2.0 中的 Windows 身份验证 http://msdn.microsoft.com/en-us/library/ff647076.aspx.

当然,Alfresco 必须启用 Kerberos 登录。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在没有用户密码的情况下获取 Alfresco 登录票证,但使用用户主体名称 (UPN) 模拟用户 的相关文章

随机推荐

  • 傅立叶级数数据与 numpy 的拟合:fft 与编码

    假设我有一些数据 y 我想对其进行傅立叶级数拟合 对此post https stackoverflow com questions 4258106 how to calculate a fourier series in numpy 解决方
  • HttpClient 不从 CookieContainer 发送 cookie

    我正在使用 Visual Studio 2012 开发带有 WPF NET 4 0 客户端的 ASP WebAPI ASP MVC 4 应用程序 客户端需要登录到服务器 我使用带有身份验证 cookie 的 FormsAuthenticat
  • MS Access 子表单在表单视图中带有#Error 字段

    微软访问 2003 我在子表单后面有一个查询 其中有如下 sql 语句 SELECT ClientTotalInvoiceLineItems CDate GetWeekEnding WeekEnding1 WeekEnding2 WeekE
  • 使用内容配置作为文件名下载 Node.js 文件

    我正在使用 Request 模块下载文件 但是当文件名必须来自 Content Disposition 标头时 我不太确定如何将响应传输到输出流 所以基本上 我需要读取响应直到找到标头 然后将其余部分通过管道传输到该文件名 这些示例显示如下
  • 检查残差并可视化零膨胀泊松 r

    我正在为 CPUE 数据运行零膨胀模型 该数据有零通货膨胀的证据 我已通过 Vuong 测试 在下面的代码中 确认了这一点 根据 AIC 的说法 完整模型 zint 优于零模型 我现在想要 检查完整模型的残差以确定模型拟合 由于缺乏来自同事
  • Javascript 设置按钮处于活动状态

    我有一个按钮表 一旦填充完毕 我就会使用 document getElementById btn0 click 单击第一个按钮 该按钮正在执行其应该执行的操作 但是按钮的背景颜色并没有像我手动单击它时那样改变 正如您所看到的 当它运行时 d
  • Rails 这个查询是否对 sql 注入开放?

    我仍在学习如何使用 ActiveRecord 编写良好的查询 我很好奇这个查询是否会受到 sql 注入的影响 因为我在查询中使用日期字段的方式 有人可以指出任何明显的错误或任何更好的方法来编写这个查询吗 arrangements for m
  • MEAN.js 社交共享?

    因此 我使用 MEAN js 构建了一个应用程序 并对文章 博客 部分进行了一些更新 以实现更好的 SEO 可读性 设计等 不过 我似乎无法弄清楚的一个问题是如何共享使用 Facebook Google Twitter 等的文章 并让它们使
  • (#5) Heroku Rails APP 上出现未经授权的源 IP 地址错误

    当有人尝试通过 Facebook 登录时 我的 Heroku 应用程序 FoR 开始抛出此错误 5 Unauthorized source IP address 发生这种情况是因为我的 Heroku 机器 与其他应用程序共享 的 IP 地址
  • Silverlight 4.0 + MVC 2.0 + WCF RIA 服务 + EF 4.0 = 加载错误

    我正在尝试建立一个具有以下内容的网站 VS 2010 用于更新的 WCF RIA 服务 Silverlight 4 0 与 WCF RIA 服务打包在一起 MVC 2 EF 4 0 我将其设置为面向公众的页面将是来自 MVC 的 html
  • 配置 Microsoft Azure Web App 的远程 IIS 管理后找不到 Microsoft.Web.Configuration.AppHostFileProvider

    几个月前 我可以成功地为我的 Azure Web 应用程序配置远程 IIS 管理 更换办公室后 我发现在新计算机上配置远程 IIS 管理后 当我尝试单击我的网站时遇到以下错误 我使用 Internet 信息服务 版本 10 0 16299
  • 写入终端和文件 C++

    我发现这个问题适用于 Python Java Linux 脚本 但不适用于 C 我想将 C 程序的所有输出写入终端和输出文件 使用这样的东西 int main freopen myfile txt w stdout cout lt lt L
  • 如何在 HTML 中的 Image-Click 上播放声音?

    当我单击或将鼠标悬停在播放按钮上时 我尝试播放声音吗 这是我到目前为止所拥有的 我有一个按钮 如果我将鼠标悬停在它上面 它会更改图像 现在我还希望它播放 mp3 play a position relative float left wid
  • 请求遵循重定向而不发送数据

    我在用着请求 js https github com request request用于 Node js 中的 http 请求 request method POST uri http www example com getData fol
  • 通过 Kotlin Coroutine Flow 压缩网络请求

    我有一个通过 RxJava 压缩两个网络请求的代码 Single zip repository requestDate repository requestTime date time gt Result date time 代表着repo
  • 如何在 systemd 控制组之外启动进程

    我有一个服务器进程 从 systemd 启动 可以启动更新进程 更新过程自行守护进程 然后 理论上 使用 SIGTERM 终止服务器 我的问题是 SIGTERM 传播到更新过程这是孩子们 出于调试目的 更新进程只是休眠 然后我手动发送终止命
  • 在 Python 中根据不安全的用户输入评估数学方程

    我有一个网站 用户在其中输入数学方程 表达式 然后根据网站提供的数据 常数 评估这些方程 需要的数学运算包括符号 算术运算 min max 以及其他一些基本功能 示例方程可以是 max a b 100 a b 200 人们可以简单地eval
  • 如何从 Python 创建 Gephi 网络图?

    我刚刚了解到 GephiStreamer https pypi python org pypi GephiStreamer https pypi python org pypi GephiStreamer 使用这个包 我们可以从 pytho
  • 在 ios9 上的 uiwebview 中显示 pdf 有时滚动会卡住

    我正在开发一个用 swift xcode7 编写的 ios 应用程序 一个视图有一个UIWebView on it using loadRequest NSURLRequest 我们从磁盘加载一个 pdf 文件 这工作正常 但有时 pdf
  • 如何在没有用户密码的情况下获取 Alfresco 登录票证,但使用用户主体名称 (UPN) 模拟用户

    我正在编写一个 DLL 它具有无需使用用户密码 仅使用用户主体名称 UPN 即可获取 Alfresco 登录票证的功能 我正在调用露天 REST API 服务 wc服务 我在 Alfresco 中使用 NTLM 我冒充用户使用Windows