HttpPlatformHandler通过启用web.config中的forwardWindowsAuthToken设置来支持转发身份验证令牌。当需要使用Windows集成身份验证时,这听起来像是一项有用的功能。关于此的文档非常含糊,因此不会解释如何使用此令牌来获取经过身份验证的用户名。
如果将此设置设置为true,则令牌将作为每个请求的标头“ X-IIS-WindowsAuthToken”转发到%HTTP_PLATFORM_PORT%侦听的子进程。该过程的责任是根据每个请求对此令牌调用CloseHandle。默认值为false。
在我的用例中,我需要将Windows集成身份验证与Python一起使用,因此也需要进行具有IIS前端设置并使用HTTP平台处理程序将请求转发到Python的设置。
问题是,如何从Python中提供的令牌中获取用户名?“ X-IIS-WindowsAuthToken”标头中的令牌看起来像是3个字符的十六进制字符,如22b。
好的,所以我对此进行了一些研究,最后回顾了Microsoft.AspNetCore.Server.IISIntegrateion.AuthenticationHandler是如何做到的。
然后找出一种方法后,我想发布此答案,以便1)我可以稍后找到它,2)至少是这样,以防其他人想知道。
好的,所以十六进制值为句柄,并且可以使用句柄调用模拟用户,然后获取用户名,完成操作。
您需要的是pywin32软件包:
pip install pywin32
完整的Python示例:
import win32api
import win32security
if 'x-iis-windowsauthtoken' in request.headers.keys():
handle_str = request.headers['x-iis-windowsauthtoken']
handle = int(handle_str, 16) # need to convert from Hex / base 16
win32security.ImpersonateLoggedOnUser(handle)
user = win32api.GetUserName()
win32security.RevertToSelf() # undo impersonation
win32api.CloseHandle(handle) # don't leak resources, need to close the handle!
print(f"user name: {user}")
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句