2011-12-06 9 views
8

無効にログインプロンプトでmod_auth_sspi_1.0.4-2.2.2私が何をしようとしている

  • は自動的にログインしている人の視聴のWindowsユーザー名グラブ私達の会社のイントラネット上のホームページを作成します。ページなしページが読み込まれるときにこれらの資格情報を入力するように求められます。

  • 現時点では、ITユーザーがドメイン設定を取得するまでしばらく時間がかかりますので、ローカルユーザー名を取得してください。たとえば、今すぐ私は "(PC名)\ windows.user.name"をプロンプトなしでキャプチャしたいと思います。

環境:

  • のApache 2.2.21のWindows 7のx64上で(それが生産にいたら、CentOSの上になります)。

  • PHP 5.3.8(VC9-ZTS)。

  • Internet Explorer 9.0.8xとFirefox 6.0.2(Chromeについては後で気になります)

  • 現在のテストページは、print_r($ _SERVER)を呼び出す単なるPHPスクリプトです。

  • これをテストしているディレクトリは、VirtualHostではありません。私がこれまでに撮影した

ステップ:アパッチにSourceForgeの抽出mod_auth_sspi.soから

  • ダウンロードmod_sspi_1.0.4-2.2.2は、ディレクトリモジュール。

  • 追加モジュール宣言:

    のLoadModule sspi_auth_moduleモジュールは/ mod_auth_sspi.so

  • 追加したディレクトリの定義:

    AllowOverrideのなし オプションなし 注文ができるように、すべての許可 を拒否

    AuthName "My Intranet" 
    AuthType SSPI 
    SSPIAuth On 
    SSPIAuthoritative Off 
    
    require valid-user 
    

  • 程度に移動して、Firefoxで統合認証を有効にします。configとPHPスクリプトの絶対URLパスにnetwork.automatic-NTLM-auth.trusted-URIを設定するには、その後のFirefoxを再起動します。

  • 私はまだIEで同等のステップを踏んでいませんが、一度Firefoxが動作するようになるのは、内部でサポートされている主なブラウザだからです。

  • Apacheを再起動し、テストPHPスクリプトを読み込もうとしました。

結果:IEとFirefoxの両方で

  • は、私は、ページがロードされる前にユーザー名とパスワードの入力を求められます。私はそのプロンプトを望んでいません。プロンプトを表示せずにユーザー名を自動的に検出したい。これまで

トラブルシューティング:

  • 私は、このようなオン/オフやその他もろもろauthritativeなど様々なSSPIオプション、を巡回しようとしました。無効。

  • 「require valid-user」を削除してもユーザー名が渡されない場合は、プロンプトが表示されなくなります(NULLではなく、単純に配列期間に設定されません)。

  • 私がプロンプトで「キャンセル」を押すと、標準の「認証が必要です」ページが表示されます。

  • 無効なユーザー名または正しいユーザー名を間違ったパスワードで入力すると、ページは読み込まれますが、ユーザー名は「(PC名)\ Guest」になります。

  • 正しいユーザー名とパスワードを入力すると、Guestではなくユーザー名が表示されます。

  • IEまたはFirefoxでユーザー名とパスワードを入力すると、保存されたパスワードキャッシュをクリアするかブラウザを再起動するまで、ブラウザは次のページのユーザー名を記憶します。

  • 私は過去3時間ほど過ごしましたが、グーグルとランダムに推測しました。ゼロ成功。私はこの質問をしている人々のいくつかの孤立したフォーラムの投稿を見つけましたが、回答が得られなかったり、すでに成功していないソリューションを提供しました。ページが任意のプロンプトを表示せず、ロード、および$ _SERVER配列出力で、現在ログオンしているWindowsのユーザー名を表示するため

繰り返しますが、私が欲しいのです。

私が理解できる限り、これは次のいずれかです:Windows設定の問題、Apacheの設定の問題、またはブラウザの設定の問題。それ以外は、私はアイデアが新鮮です。

ご提供いただけるご支援に感謝します。ありがとう!

--Kris

+0

申し訳ありませんが上記を完全に読んでいない、あなたは窓ステーションで作業しています。 – ehime

答えて

7

数日を要しましたが、結局私自身でそれを理解しました。どうやらFirefoxのabout:config設定について説明している様々な文書やチュートリアルは間違っています。彼らは、プロトコルプレフィックスを含む完全なURIが含まれなければならないと主張する。判明しているとおり、正反対のことは真実です。

暗闇の中のランダムなショットとして、私は「localhost」(テストサーバーが動作しているドメイン)に設定しようとしました。そしてボイル!それはそれを修正!一方、 "http:// localhost"は、それを中断させました。

Firefoxで動作したら、サーバー側の設定が正しいことを確認して、IEとChromeに適用することができました。 IEの場合、 "http:// localhost"(この場合は、プロトコルプレフィックスが必要です)を "イントラネット"ゾーンに追加しました。そして、ChromeはIEが使用するのと同じネットワーク設定を使用するので、そのステップは両方のブラウザで動作します。

サーバー側の設定が行われる限り、私は最初からそういった風に見えました。私はそれを少し簡略化することができました、しかし、これは本当にあなたがディレクトリブロックに必要なのはこれです:あなたがしますprint_r($ _SERVERを)やってPHPスクリプトを指している場合、この設定で

AuthName "Whatever you want to call your intranet" 
AuthType SSPI 
SSPIAuth On 

require valid-user 

、あなたがドメイン部分を取り除きたい場合(つまり、「DEV-KDC-PC01の\」)、あなたはPHPでそれを解析したり、この行を追加することができますいずれか

[REMOTE_USER] => dev-kdc-pc01\kris.craig 
[AUTH_TYPE] => NTLM 
[PHP_AUTH_USER] => dev-kdc-pc01\kris.craig 

:出力は次のようなものが含まれています上記のhttpd.confのディレクトリブロックにあるSSPIの内容:

SSPIOmitDomain On 

これは、Apache Webサーバーがlocalhost上で実行されているWindowsシステムでのみテストしました。 ApacheサーバがLinux上で動作している状況ではまだテストしていませんが、サーバがブラウザから送信されたものを受け入れるだけなので、結果に影響はありません。また、クライアントがWindowsやその他のSSPI互換環境を実行している必要があります。私は、Mac使用従業員のためにこの作業をどうやって行うかをまだ決めていません。

ではなく、には現在ドメインが設定されています。別の場所で公開されている記事によれば、その動作はドメインのメンバであるワークステーション上で同一でなければなりません。

こちらがお役に立てば幸いです。ありがとう!

+0

すべてを試しても、あなたのソリューションは私を助けません... – Somnium

0

これは部分的な回答かもしれません。

BOOL WINAPI GetUserName(
    __out LPTSTR lpBuffer, 
    __inout LPDWORD lpnSize 
); 

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724432%28v=vs.85%29.aspx

それはあなたがこれを使用してシステム情報を取り出すことができるように、残りの半分は はPHPに投稿、その後、情報をこすりするPERLやPythonを使用して、それを自動化するかもしれません見えます。

ここでは、WindowsのSysInfoを取得する際の概要を説明します。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724426%28v=vs.85%29.aspx

正直なところ、これはLinuxを使用している場合はPECL/PAMを行うにはかなり簡単なことです。

+0

クライアントサイドで実行する必要はありませんか?サーバーは最終的にCentOSを実行し、基本的にブラウザがクレデンシャルを要求するものを受け入れます。 –

関連する問題