1つの重要な問題の解決策を共有したいと思います。 組織のオフィス内のワイヤレスネットワークへの便利なアクセスを手配する必要がありました。 ネットワークは、パブリックインターネットへのアクセスのみを提供し、企業ネットワークには何も接続しません-完全に分離されたシステム 唯一の一般的なコンポーネントはユーザーです。 プロセスを簡素化するために、レイヤ3レベルで認証を行うことが決定されました。つまり、ネットワークが開いているため、接続後、パスワードを入力してインターネットにアクセスする必要があります(
Cisco WLC Web Auth )。
原則として、すべてがシンプルで、各ユーザーのアカウントが作成され、すべての準備が整っています。 ただし、ヘルプデスクスタッフが不足しているため、ログインを作成したり、スタッフにパスワードを発行したりする人はいませんでした。 タスクは、既存の認証ソースの1つを使用することでした。これは標準的な状況では非常に簡単です。たとえば、MS Active Directoryの場合、サーバーの半径としてNPSを使用でき、LDAPに直接接続できます。
私たちの場合、一方と他方(ネットワークのADと企業イントラネットへのアクセス用のLDAP)がありましたが、WiFiセグメントからはまったくアクセスできませんでした。 与えられた最大値は、テストADアカウントとイントラネットのアカウントです。 彼らは座って考えました...それが彼らが思いついたものです
FreeRadiusには、PHPなどの外部スクリプトから認証を要求する機能があります。 これは次のように行われます。
authorize{ update control { Auth-Type := `/usr/bin/php -f /etc/raddb/yourscript.php '%{User-Name}' '%{User-Password}'` }
この場合、PHPはログインとパスワードのみを検証し、AcceptまたはRejectで応答する必要があります。
これを使用して、問題を解決しました。 何が起こったかの図:

PHPスクリプトは、curlを介して渡された '%{User-Name}' '%{User-Password}' 'でイントラネットページにログインし、成功したかどうかを確認し、成功した場合は "Accept"をエコーします。
スクリプトコードは次のとおりです(IBM Tivoli Access Manager WebSEALを使用してイントラネットにログオンします)。
$authSuccessful = False; $user = $argv[1]; $password = $argv[2]; $url = 'https://intranet.of.the.company.accessible.from.internet/pkmslogin.form'; $fields_string= "username=".$user."&password=".$password."&login-form-type=pwd&submit=Login";
イントラネットのパスワードを覚えていない人を除き(すべてのイントラネットのパスワードはADのパスワードとは異なります)、すべてがうまく機能し、誰もが幸せでした。 ITのボスは、パスワードをメインのパスワード(この場合はADがメインのパスワード)だけでなく全員が記憶する必要があることをユーザーに示唆する代わりに、技術的な方法で問題を解決するように依頼しました。
幸いなことに、このオフィスには、インターネットからアクセス可能なWebインターフェイスと認証ソースとしてのMS ADを備えたCitrix XenAppサーバーがありました。 彼らが使用したもの:
スクリプトコード(Citrix Web Interface v 5.4へのログイン)
$authSuccessful = False; $user = $argv[1]; $password = $argv[2];
さらに先に進むことにし、両方のスクリプトを1つに統合しました。イントラネットログインが最初にチェックされ、次にCitrix WI経由のMS ADがチェックされます。
最終的なスクリプトコード $authSuccessful = False; $user = $argv[1]; $password = $argv[2]; $url = 'https://intranet.of.the.company.accessible.from.internet/pkmslogin.form'; $fields_string= "username=".$user."&password=".$password."&login-form-type=pwd&submit=Login";