AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 37887
Accepted
wweicker
wweicker
Asked: 2009-07-09 10:56:34 +0800 CST2009-07-09 10:56:34 +0800 CST 2009-07-09 10:56:34 +0800 CST

启用集成 Windows 身份验证时,ASP(经典)在哪个帐户下运行?

  • 772

我有一个 ASP 文件试图向在同一虚拟目录下的同一台服务器上运行的 ASP.NET web 服务发出 web 服务请求。在 IIS 中,虚拟目录设置为禁用匿名访问,并打开“集成 Windows 身份验证”。

所以问题是,当用户的机器请求运行 ASP 页面甚至手动运行 WebService.asmx .NET 文件时,它可以工作,因为用户的凭据被传递,但是当 ASP 文件尝试调用 web 服务时,我们得到一个401.2 - 未经授权:访问因服务器配置而被拒绝。

例如:

  • 来自用户计算机上的浏览器的“DIRECTORY\user1”请求运行良好的 Service.asmx。
  • 来自用户计算机上的浏览器的“DIRECTORY\user1”请求 File1.asp,它工作正常。
  • _________ 从服务器上的 File1.asp 中请求返回 401.2 的 Service.asmx

所以我假设我需要在 WebService.asmx 上设置 NTFS 权限以允许 ASP 帐户读取和执行权限,但我不知道它在哪个帐户下运行,并且在阅读了一些响应后进一步思考,似乎我们没有达到 NTFS 级别,IIS 完全拒绝该请求,因为匿名访问已关闭。

这是否表明我们需要让 ASP 进程在域帐户下运行?

iis iis-6 asp-classic
  • 4 4 个回答
  • 14454 Views

4 个回答

  • Voted
  1. Best Answer
    Evan Anderson
    2009-07-09T11:00:49+08:002009-07-09T11:00:49+08:00

    经典 ASP 运行模拟在 HTTP 会话中通过服务器身份验证的用户。您需要授予正在验证的用户运行经典 ASP 应用程序权限或允许匿名访问。

    如果您已经尝试过“经过身份验证的用户”并且它不起作用,那么我会说您没有文件权限问题。

    当您说“...ASP 文件尝试调用 Web 服务...”时,您是什么意思?您是说 ASP 脚本正在向服务器发出 HTTP 请求吗?如果是这样,用户的凭据将不会在该请求中传递,因为“集成 Windows 身份验证”不会为服务器提供明文密码,以便在向其他服务器(或自身)进行身份验证时使用。

    编辑:

    然后,根据您的评论,如上所述,服务器将没有用于对用户进行身份验证的凭据,因为集成 Windows 身份验证为服务器提供了没有明文密码以传递给其他服务器(或它本身,在这种情况下是另一台服务器) )。

    您可以尝试三件事:

    • 如果您可以让 WebService.asmx 允许匿名访问,您的服务器到自身的 HTTP 调用应该可以工作(您需要通过允许 IUSR_xxx 读取文件并修改“匿名访问和身份验证控制”设置来明确允许匿名访问通过 IIS 管理控制台管理单元对文件本身进行“匿名访问”,因为该文件将从它所在的目录继承启用的“集成 Windows 身份验证”和禁用的“匿名访问”设置)。

    • 如果您用于获取 HTTP 请求的控件支持透明地将登录用户的凭据提供给远程服务器,您可以在经典 ASP 脚本上启用“基本身份验证”(它确实为服务器提供了一个明文密码以通过到其他服务器),以便您的 HTTP 请求控件可以在请求 WebService.asmx 期间传递该明文密码。此时,您将需要 SSL 访问经典的 ASP 脚本,以使明文密码远离网络。

    • 最后,您可以在经典 ASP 脚本中硬编码一些基本身份验证凭据,并在 WebService.asmx 文件上启用基本身份验证。这意味着 WebService.asmx 将始终看到来自同一用户的访问。

    这些都不是很好的解决方案。当您尝试以经过身份验证以运行经典 ASP 脚本的用户身份验证后端层(数据库等)时,您遇到了我们在“经典 ASP”中看到的“经典”问题。

    • 4
  2. David Spillett
    2009-07-09T11:07:02+08:002009-07-09T11:07:02+08:00

    如果集成身份验证已打开并且用户正在使用将执行 windows 集成身份验证的浏览器并且用户以转换为 Web 服务器的帐户登录(例如,客户端计算机与 Web 服务器位于同一域中) 您的脚本将作为该用户的帐户运行。

    如果上述任何一项为假(因此服务器无法与客户端浏览器同意用户帐户),那么IUSR_<machine>默认情况下使用您设置为匿名用户的任何内容,或者如果禁用匿名浏览,用户将得到 401.* 错误。

    这假设其他认证意见是关闭的。如果您同时启用了 Windows 集成和基本身份验证方案,我不确定什么优先。

    您可以通过放入查询 reqeust.servervariables 集合并输出相关值的脚本来查看 Web 服务器当前用于请求特定区域的用户 - 用户名在其中。

    • 1
  3. Ryan Fisher
    2009-07-09T14:23:38+08:002009-07-09T14:23:38+08:00

    看起来您正在尝试进行“双跳”身份验证。通常这发生在后端 SQL 服务的上下文中,但我认为它可能适用于在同一台服务器上运行的单独服务(虽然我不是 100% 确定)。在 MSKB 中搜索该术语“双跳”,您将获得一些解释如何设置委托以使其工作的文档。这是一个开始,http://support.microsoft.com/kb/326985

    您需要将 IIS 服务器设置为“允许委派”。当用户通过 Windows 集成身份验证进行身份验证时,他们应该获得 Kerberos 票证(如果您获得 NTLM 身份验证,这将不起作用)。

    为了进行委派,您需要向服务器添加一个 SPN。确保用户使用服务器在 AD 中具有 SPN 的实际 FQDN 访问网页。服务主体名称 (SPN) 是用户 Kerberos 代理将用来创建正确的 Kerberos 票证的名称,这将允许 IIS 服务器在将请求移交给下一个服务时模拟用户。

    • 1
  4. JMusgrove
    2009-07-09T14:50:08+08:002009-07-09T14:50:08+08:00

    网络服务使用登录用户的凭据是否重要?如果您使用 MSXML2.ServerXMLHTTPRequest 之类的东西来调用 Web 服务,您是否可以简单地在 .Open 方法中提供凭据来为 Web 服务提供一组固定的凭据?

    • 1

相关问题

  • 是否有一种简单的方法可以生成有关 IIS 中“死”文件的报告?

  • IIS 7 中的 URL 重写

  • 对于 ASP.Net 应用程序,Windows 64 位相对于 32 位的主要优势是什么?

  • 谁负责为 Web 应用程序维护 IIS?

  • 如何在家外设置 Web 服务器?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve