Skip to content

Commit 94a9634

Browse files
committed
fallback
1 parent 5ec4260 commit 94a9634

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/managedexports.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -516,7 +516,13 @@ http_get_authentication_information(
516516
)
517517
{
518518
*pstrAuthType = SysAllocString(pInProcessHandler->QueryHttpContext()->GetUser()->GetAuthenticationType());
519-
*pvToken = pInProcessHandler->QueryHttpContext()->GetUser()->GetImpersonationToken();
519+
// prefer GetPrimaryToken over GetImpersonationToken as that's what we've been using since before .NET 10
520+
// we'll fallback to GetImpersonationToken if GetPrimaryToken is not available
521+
*pvToken = pInProcessHandler->QueryHttpContext()->GetUser()->GetPrimaryToken();
522+
if (*pvToken == nullptr)
523+
{
524+
*pvToken = pInProcessHandler->QueryHttpContext()->GetUser()->GetImpersonationToken();
525+
}
520526

521527
return S_OK;
522528
}

src/Servers/IIS/AspNetCoreModuleV2/OutOfProcessRequestHandler/forwardinghandler.cpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -819,12 +819,20 @@ FORWARDING_HANDLER::GetHeaders(
819819
(_wcsicmp(m_pW3Context->GetUser()->GetAuthenticationType(), L"negotiate") == 0 ||
820820
_wcsicmp(m_pW3Context->GetUser()->GetAuthenticationType(), L"ntlm") == 0))
821821
{
822-
HANDLE impersonationToken = m_pW3Context->GetUser()->GetImpersonationToken();
823-
if (impersonationToken != nullptr &&
824-
impersonationToken != INVALID_HANDLE_VALUE)
822+
// prefer GetPrimaryToken over GetImpersonationToken as that's what we've been using since before .NET 10
823+
// we'll fallback to GetImpersonationToken if GetPrimaryToken is not available
824+
HANDLE authToken = m_pW3Context->GetUser()->GetPrimaryToken();
825+
if (authToken == nullptr ||
826+
authToken == INVALID_HANDLE_VALUE)
827+
{
828+
authToken = m_pW3Context->GetUser()->GetImpersonationToken();
829+
}
830+
831+
if (authToken != nullptr &&
832+
authToken != INVALID_HANDLE_VALUE)
825833
{
826834
HANDLE hTargetTokenHandle = nullptr;
827-
RETURN_IF_FAILED(pServerProcess->SetWindowsAuthToken(impersonationToken,
835+
RETURN_IF_FAILED(pServerProcess->SetWindowsAuthToken(authToken,
828836
&hTargetTokenHandle));
829837

830838
//

0 commit comments

Comments
 (0)