3

PyAuthenNTLM2モジュールを備えたApache2があります(https://github.com/Legrandin/PyAuthenNTLM2を参照)。このApacheモジュールは、Windowsユーザー名を$_SERVER['REMOTE_USER']に配置します。

これを有効にするには、ファイルまたはディレクトリのapache config(またはhtaccess)に次のようなディレクティブを配置する必要があります。

Order allow,deny
Allow from all

AuthType NTLM
AuthName "Test"
require valid-user

PythonAuthenHandler pyntlm
PythonOption Domain TESTDOMAIN
PythonOption PDC 192.168.0.10

このようなディレクトリの下にあるファイル(css、jsを含む)は、NTLMクレデンシャルがブラウザから提供されている場合にのみアクセスできます。したがって、機能しないページで「ntlm保護」されているインクルードを使用することはできません。

とにかく、私が欲しいのは、セッションを設定する単一のページであり、セッションを使用してさらに承認が行われます。セッションがまだ設定されていないか、期限切れの場合、ユーザーは目に見えない形で自動ログインページに移動し、実際に要求されたページに戻ります。

どうすればそれを達成できますか?

4

2 に答える 2

2

私は次のスクリプト/ソリューションを思いついた:

<?php

$validApplications = array("Application_1", "Application_2");
$baseUrl = 'http://' . $_SERVER["SERVER_NAME"] . '/';

if(!isset($_SERVER["REMOTE_USER"])){
    header('HTTP/1.1 401 Not Authorized', true, 401);
    //...display error page
    exit(0);
}

if(!isset($_GET["applicationName"]) 
        || !in_array($_GET["applicationName"], $validApplications) ){
    header('HTTP/1.1 400 Bad Request', true, 400);  
    //...display error page
    exit(0);
}

$application = $_GET["applicationName"];

if(!isset($_GET["returnTo"])){
    $returnTo = $baseUrl . $application . "index.php";
} else {
    $returnTo = $_GET["returnTo"];
}

$sessionName = "PHP" . $application . "Session";

session_name($sessionName);
session_start();

session_regenerate_id(TRUE);
/* erase data carried over from previous session */
$_SESSION=array();
$_SESSION['login'] = $_SERVER['REMOTE_USER'];
header("Location: " . $returnTo);
?>

このスクリプトは、login.phpを、質問に表示されているように$ _SERVER ["REMOTE_USER"](PyAuthenNTLM2を使用)を設定できるApache2モジュールの下に配置する必要があります。

次に、anaアプリケーションの各Webページは、最初に$ _SESSION ['login']が設定されているかどうかを確認し、設定されていない場合はこのログインページにリダイレクトする必要があります。

if (!isset($_SESSION['login'])) {
    $queryString = "returnTo=" . urlencode($_SERVER["REQUEST_URI"]) . "&applicationName=Application_1";
    header ("location: " . $baseUrl . "login.php?" . $queryString);
    exit(0);
}
于 2012-08-07T10:39:57.243 に答える
0

私はApacheとPHPでこれを行いました、あなたはセッション処理を見る必要があるでしょう。「Pythonセッション処理」のクイックグーグルはさまざまな例を返しました

于 2012-07-31T12:12:40.277 に答える