拡張 DLL の呼び出し
Note
Windows Server 2008 以降、インターネット認証サービス (IAS) の名前がネットワーク ポリシー サーバー (NPS) に変更されました。 このトピックの内容は、IAS と NPS の両方に適用されます。 テキスト全体で、NPS は、最初に IAS と呼ばれたバージョンを含め、サービスのすべてのバージョンを参照するために使用されます。
NPS 拡張機能 DLL は、RadiusExtensionProcess、RadiusExtensionProcessEx、RadiusExtensionProcess2 のいずれかのコールバック関数をエクスポートする必要があります。 NPS は、ネットワーク アクセス サーバー (NAS) から受信する有効な認証またはアカウンティング パケットごとに、これらの関数を呼び出します。 NPS は、NPS の パラメーター レジストリ キーの下に一覧表示されている各 DLL でこれらの関数を呼び出します。 DLL は、一覧表示されている順序で呼び出されます。
NPS 拡張機能 DLL が上記の関数の 1 つ以上をエクスポートする場合、NPS は、オペレーティング システムでサポートされている最新の関数のいずれか 1 つだけを呼び出します。
Note
IAS では、最初は RadiusExtensionProcess のみがサポートされていました。 IAS では、 RadiusExtensionProcessEx もサポートされています。 IAS (およびそれ以降の NPS) では、 RadiusExtensionProcess2 もサポートされています。
NPS 拡張機能 DLL では、 RadiusExtensionInit 関数と RadiusExtensionTerm 関数をエクスポートすることもできます。 存在する場合、NPS は、サービスの開始時と停止時にこれらの関数をそれぞれ呼び出します。
RadiusExtensionProcess コールバック関数
認証拡張機能 DLL では、 RadiusExtensionProcess は、認証要求またはアカウンティング要求で NPS によって受信されたすべての属性を受け取ります。 これらの属性を使用して、関数は追加の検証を実行したり、ユーザーの承認を確認したり、アカウンティング レコードを中央状態サーバーに送信したりできます。
承認拡張機能 DLL では、 RadiusExtensionProcess は NPS 承認サービスによって生成されたすべての属性を受け取ります。 これらは、Access-Accept パケットで返される属性です。
RadiusExtensionProcess を呼び出した後、NPS によって実行されるアクションは、RadiusExtensionProcess の戻り値と pfAction パラメーターで返される値によって異なります。 これらの値を次の表に示します。
pfAction | 認証拡張機能 DLL | 承認拡張機能 DLL |
---|---|---|
承諾 | それ以上の認証拡張機能 DLL をバイパスし、NPS 認証メカニズムもバイパスします。 | 受け入れることはできません。 |
Reject | それ以上の認証拡張機能 DLL をバイパスし、NPS 認証メカニズムもバイパスします。 パケットAccess-Reject送信されます。 | それ以上の承認拡張機能 DLL をバイパスします。 |
続行 | レジストリに認証拡張機能 DLL がこれ以上表示されない場合、パケットは次の認証拡張機能 DLL または NPS 認証メカニズムに送信されます。 | レジストリに承認拡張機能 DLL がこれ以上表示されない場合、パケットは次の承認拡張機能 DLL または NPS アカウンティング ログに送信されます。 |
すべての拡張 DLL について、 RadiusExtensionProcess が エラーを返した場合、パケットは破棄されます。 エラーが原因で破棄されたパケットは、NPS アカウンティング ログによって処理されません。
エラーが発生した場合、NPS は汎用エラー イベントをイベント ログにポストします。 拡張機能 DLL では、追加のエラー ログ記録を提供することをお勧めします。
上記のプロセスを表す詳細と図については、「 NPS 拡張機能について」を参照してください。
RadiusExtensionProcess は 、パケットの受け入れまたは拒否を確認できない場合にエラーを返す必要があります。 この状況は、ネットワークの問題によって RadiusExtensionProcess がユーザー認証データベースと通信できなくなる場合に発生する可能性があります。
アカウンティング パケットを処理する場合、 pfAction パラメーターは NULL であるため、 pfAction を設定できません。 アカウンティング要求の処理中に RadiusExtensionProcess 関数からエラーを返すと、NPS によって要求が破棄されます。
Note
承諾を受け取った後、NPS は、シーケンス内の残りの DLL で RadiusExtensionProcess を呼び出しません。 一部の認証関数では承認も実装される場合があるため、このような認証関数をスキップすると、承認が省略される可能性があります。 RadiusExtensionProcess のインスタンスが Accept を返す場合は、取得した承認について何も想定しないことが重要です。
Continue または Accept が返された場合、領域に対応するプロファイルは、Access-Accept パケットで返送されます。
認証拡張機能 DLL は、組み込みの NPS 認証プロバイダーや他の拡張機能 DLL と共存するように設計する必要があります。 拡張機能が特定のユーザー データベース (Windows Active Directory など) にのみ適用される場合は、要求を処理する前に、pAttrs パラメーターで渡された ratProvider 属性を確認する必要があります。 ratProvider 属性は、 pAttrs パラメーターによって指される属性の一覧のいずれかになります。
必要な属性がないため、拡張 DLL は要求を拒否しないでください。 たとえば、認証拡張機能でUser-Password属性 ratUserPassword が必要で、 属性が存在しない場合、拡張機能は raContinue のアクションを返して、他の拡張機能とプロバイダーに要求を処理する機会を与える必要があります。
NPS は、特定の認証データベースの使用を決定した後、ユーザーが認証される前に RadiusExtensionProcess 関数を呼び出します。 そのため、関数で使用する認証データベースに関する情報を使用できるため、関数は適切な認証データベースでユーザーの承認をチェックできます。 NPS では、Windows Active Directory を含むさまざまな認証データベースがサポートされています。
RadiusExtensionProcessEx コールバック関数
NPS 拡張機能 DLL では、 RadiusExtensionProcess の代わりに、または RadiusExtensionProcess に加えて RadiusExtensionProcessEx をエクスポートできます。 この関数を使用すると、DLL は認証応答に追加の承認属性を追加できます。
RadiusExtensionProcess コールバック関数セクションで説明されているのと同じ情報が RadiusExtensionProcessEx 関数に適用されます。
RadiusExtensionProcessEx は、存在する属性を変更または削除できません。 DLL で属性を変更または削除する必要があるシナリオが発生した場合、NPS ユーザー インターフェイスを使用して属性が存在しないことを確認するだけです。 既定では、承認属性は存在しません。 存在するは、ユーザー インターフェイスを介して追加されている必要があります。
複数の承認 DLL が構成されていて、これらの DLL の一部が RadiusExtensionProcessEx を実装している場合、特定の DLL の RadiusExtensionProcess/Ex 関数は、以前に呼び出された Authorization DLL から属性を受け取りません。 NPS 承認サービスによって生成された属性のみを受け取ります。
RadiusExtensionProcess2 コールバック関数
NPS 拡張機能 DLL では、 RadiusExtensionProcessEx の代わりに、または RadiusExtensionProcessEx に加えて RadiusExtensionProcess2 をエクスポートすることもできます。 この関数を使用すると、DLL は認証要求または応答との間で属性を追加、変更、および削除できます。
RadiusExtensionProcessEx コールバック関数セクションで説明されているのと同じ情報が RadiusExtensionProcess2 関数に適用されます。ただし、次の例外があります。
- Authorization DLL では、 RadiusExtensionProcess2 は 、NPS 承認サービスによって生成された属性と、以前に呼び出された Authorization DLL から生成された属性の両方を受け取ります。
- RadiusExtensionProcess2 には pfAction パラメーターがありません。 RadiusExtensionProcess2 は、RADIUS_EXTENSION_CONTROL_BLOCK構造体で提供される SetResponseType 関数を使用して、要求の最終的な処理 を 設定します。
- NPS は、以前の DLL の関数が Accept を返したかどうかに関係なく、残りの DLL で RadiusExtensionProcess2 関数を常に呼び出します。
関連トピック