簡體   English   中英

僅限於NTLM和PHP的SSO

[英]SSO with NTLM and PHP only

我嘗試使用NTLM在Windows域中創建SSO,並且不在Windows域中的Linux機器上使用Apache2服務器創建服務器模塊。 不知道這是否有可能。 但是,我現在向您展示我所想出的以及接下來要知道的。

好的,首先我打開了瀏覽器(IE和FF)發送帶有NTLM數據(消息類型1)的Authorization標頭的選項。 這項工作我得到一個像這樣的字符串:

NTLMSSP²¢1 (±USERS-PCDOMAIN

但是接下來呢? 我必須將此字符串發送到AD運行正常的服務器上嗎? 因此,我的服務器稱為SERVER1.DOMAIN ,其IP為192.168.1.14

我現在可以使用哪種協議和哪種方式將消息類型1發送到我的AD服務器以獲取NTLM質詢消息(類型2)?

我想我必須寫這樣的東西:

<?php

$fp = fsockopen("192.168.1.14", 80 /* <--- which port? */, $errno, $errstr, 30);

if (!$fp)
    die("$errstr ($errno)");

fwrite($fp, $headers['Authorization'] . "\r\n");

$ntlmChallengeData = '';

while (!feof($fp)) {
    $ntlmChallengeData .= fgets($fp, 128);
}

fclose($fp);

var_dump($ntlmChallengeData); // The challenge data

但是Windows Server在哪個端口上響應我的NTLM數據?

僅使用PHP是不可能的。 驗證NTLMv2憑據需要具有Active Directory DC的NETLOGON服務的SecureChannel加密RPC。 輕描淡寫地說這是一件困難的事情。

在Linux環境中,最好的選擇是查看Samba“ winbind”軟件包並在Apache級別進行身份驗證。 這些模塊一直是一個笨拙的IMO,但是mod_auth_kerb和mod_auth_winbind是我上次檢查過的這類東西的標准模塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM