我正在编写一个内部网系统,通过使用ADODB.Stream
的脚本将文件本地写入网络服务器。问题是,它使用已记录的Windows / AD用户帐户来执行此操作,因为默认情况下在IIS中激活模拟 - 我实际上需要在大多数时间激活它。由于我不想向需要使用该系统的任何人提供对Web服务器的写访问权限,因此我需要暂时将该会话“取消模拟”回“IUSR”帐户。
我怎么能这样做?优先使用经典ASP,因为整个网站都是用它编码的,但也可能是ASP.net(C#)中的东西。
我在一家大公司工作,我对IIS控制面板/服务器机器的访问有点受限(需要与另一个部门打交道)。我也无法安装任何自定义模块或DLL。
答案 0 :(得分:1)
过去,我使用Msxml2.ServerXMLHTTP
进行服务器端调用,使用HTTP授权标头切换模拟上下文。这允许我使用与网站运行的不同的上下文来创建文件。
Sub ExecuteContext(url, data, user, password)
Dim http
Set http = Server.CreateObject("Msxml2.ServerXMLHTTP")
Response.CharSet = "utf-8"
Call http.open("POST", url, False, user, password)
'Called using Basic Authentication (not as secure as Windows Authenticated by should be adequate)
Call http.setRequestHeader("Authorization", "Basic " & Base64Encode(user & ":" & password))
Call http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
Call http.send(data)
End Sub
'Supporting functions to do the Base64 encoded Authorization header.
Function Base64Encode(inData)
'ripped from:
'http://www.pstruh.cz/tips/detpg_Base64Encode.htm
'rfc1521
'2001 Antonin Foller, PSTRUH Software, http://pstruh.cz
Const Base64 = _
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
Dim sOut, I
'For each group of 3 bytes
For I = 1 To Len(inData) Step 3
Dim nGroup, pOut
'Create one long from this 3 bytes.
nGroup = &H10000 * Asc(Mid(inData, I, 1)) + _
&H100 * MyASC(Mid(inData, I + 1, 1)) + _
MyASC(Mid(inData, I + 2, 1))
'Oct splits the long To 8 groups with 3 bits
nGroup = Oct(nGroup)
'Add leading zeros
nGroup = String(8 - Len(nGroup), "0") & nGroup
'Convert To base64
pOut = Mid(Base64, CLng("&o" & Mid(nGroup, 1, 2)) + 1, 1) + _
Mid(Base64, CLng("&o" & Mid(nGroup, 3, 2)) + 1, 1) + _
Mid(Base64, CLng("&o" & Mid(nGroup, 5, 2)) + 1, 1) + _
Mid(Base64, CLng("&o" & Mid(nGroup, 7, 2)) + 1, 1)
'Add the part To OutPut string
sOut = sOut + pOut
Next
Select Case Len(inData) Mod 3
Case 1: '8 bit final
sOut = Left(sOut, Len(sOut) - 2) + "=="
Case 2: '16 bit final
sOut = Left(sOut, Len(sOut) - 1) + "="
End Select
Base64Encode = sOut
End Function
Function MyASC(OneChar)
If OneChar = "" Then MyASC = 0 Else MyASC = Asc(OneChar)
End Function
这种方法非常灵活,在我的实现中,我使用它来通过POST到自身来改变同一页面中的上下文,但使用不同的data
。
答案 1 :(得分:1)
我以不同的方式解决了模仿问题。刚刚编写了一个ASP.net脚本,使用基于on this one的HttpPostedFile
来保存文件,它就像一个魅力。这些文件(可能)是在IIS中配置的应用程序池用户下编写的。