代行認証
代行認証の背景
InterSystems IRIS では、代行認証がサポートされます。代行認証を使用すると、企業の既存の認証システムなど、カスタムのメカニズムを実装して、インターシステムズのセキュリティに含まれる認証アクティビティやロール管理アクティビティを置き換えることができます。アプリケーション開発者は、代行認証コードのコンテンツを完全に制御します。代行認証は、InterSystems IRIS のインスタンスの %SYS ネームスペースで ZAUTHENTICATE ルーチンが検出された場合に行われます。このようなルーチンが存在する場合、InterSystems IRIS はこれを使用して、新規コードと既存のコードのいずれかを呼び出してユーザを認証します。InterSystems IRIS には ZAUTHENTICATE.mac ルーチンがあり、これは ZAUTHENTICATE ルーチンを作成するためのテンプレートとして機能します。
HealthShare® で認証を使用している場合は、インターシステムズが提供する ZAUTHENTICATE ルーチンOpens in a new tabを使用する必要があります。独自のルーチンは作成できません。
代行認証の動作
ユーザがログインを試行して、InterSystems IRIS が代行認証を呼び出す場合、イベントのシーケンスは以下のようになります。
-
サービスまたはアプリケーションが代行認証を使用する場合、ログイン試行によって ZAUTHENTICATE ルーチンが自動的に呼び出されます。このルーチンの認証コードは、任意のユーザ定義の ObjectScript、クラス・メソッド、または $ZF コールアウト・コードにできます。
-
次に行う手順は、認証が成功するかどうか、および今回が ZAUTHENTICATE を使用した最初のログインであるかどうかによって異なります。
-
ZAUTHENTICATE が成功し、今回がこのメカニズムを使用した初めてのユーザ認証である場合、そのユーザはタイプを “代行ユーザ” として InterSystems IRIS ユーザのリストに追加されます。ZAUTHENTICATE によってロールまたは他の特性が設定されると、そのロールまたは特性がそのユーザのプロパティの一部になります。
-
ZAUTHENTICATE が成功し、今回が最初のログインでない場合、ZAUTHENTICATE によってそのユーザのプロパティが更新されます。
-
ZAUTHENTICATE が失敗すると、アクセス拒否のエラーが表示されます。ユーザはシステムにアクセスできません。この原因を調べる手順は次のとおりです。
-
ユーザ・プロファイルの [ログイン失敗の理由] フィールドの内容をチェックします。
-
さらに、監査ログで %System/%Login/LoginFailure イベントをチェックして、詳細な情報を確認します。監査や LoginFailure イベントが有効になっていない場合は、これらを両方とも有効にしてログイン失敗の状況を再現する必要がある場合があります。
-
-
-
インスタンスと関連サービスの 2 要素認証が有効な場合は、ユーザの PhoneNumber および PhoneProvider プロパティが設定されていることが確認されます。これらのプロパティが設定されている場合は、2 要素認証が実行されます。これらのプロパティが設定されていない場合は、2 要素認証に進むことはできず、ユーザは認証されません。
-
[ユーザ] ページ ([システム管理] > [セキュリティ] > [ユーザ]) で、ユーザ・リストの [タイプ] 列に代行ユーザとしてユーザが表示されます。管理ポータルに表示されるユーザのプロパティは読み取り専用です。InterSystems IRIS から編集することはできません (これらの情報はすべて InterSystems IRIS の外部から取得されるため)。
Note:InterSystems IRIS パスワード・ユーザが、同時に代行ユーザになることはできません。
代行認証の構成の概要
代行認証を使用するには、以下の手順を実行します。
-
ZAUTHENTICATE ルーチンで、ユーザ定義の認証コードを作成します。これには、2 要素認証を使用できます。このルーチンは、ロールや他のユーザ・プロパティの指定など、ユーザ・アカウントの基本的な設定も実行することができます。
HealthShare Health Connect を使用している場合は、このドキュメントの説明に従って ZAUTHENTICATE カスタム・ルーチンを作成します。
HealthShare Unified Care Record を使用している場合、Unified Care Record には独自のバージョンのルーチンが付属しているため、カスタム・バージョンの ZAUTHENTICATE を作成して代行認証を実装することはできません。代わりに、クラス HS.Local.ZAUTHENTICATE のメソッドをカスタマイズする必要があります。詳細は、ブック "Authenticating Users in Unified Care Record" の “Customizing Authentication via Local ZAUTHENTICATEOpens in a new tab” を参照してください。
-
[認証オプション] ページで、InterSystems IRIS インスタンスに対して代行認証を有効にします。
-
オプションとして、InterSystems IRIS インスタンスおよび必要に応じて Web アプリケーションとクライアント・サーバ・アプリケーションで、2 要素認証を有効化します。
例えば、インスタンスの管理ポータルで代行認証を使用するには、以下の手順を実行します。
-
ZAUTHENTICATE で、ユーザ定義の認証コードを作成します。
-
InterSystems IRIS インスタンス全体の代行認証を有効にします。
-
/csp/sys* アプリケーションのセットの代行認証を有効にします。
代行 (ユーザ定義) 認証コードの作成
ここでは、ユーザ専用の ZAUTHENTICATE ルーチン作成のさまざまな側面について説明します。
認証コードの基礎
インターシステムズが提供するサンプル・ルーチン ZAUTHENTICATE.mac をコピーして変更することができます。このルーチンは GitHub の Samples-Security サンプルに含まれています (https://github.com/intersystems/Samples-SecurityOpens in a new tab)。"InterSystems IRIS で使用するサンプルのダウンロード" で説明されているようにサンプル全体をダウンロードすることもできますが、単に GitHub でルーチンを開いて、その内容をコピーする方が簡単です。
独自の ZAUTHENTICATE.mac を作成するには、以下の手順を実行します。
-
ZAUTHENTICATE.mac をテンプレートとして使用するには、その内容を %SYS ネームスペースの ZAUTHENTICATE.mac ルーチンにコピーして保存します。
-
ZAUTHENTICATE.mac サンプル内のコメントを確認します。そこには、カスタム版のルーチンを実装する方法に関する重要なガイダンスが記載されています。
-
ユーザ・アカウントの特性を設定するには、カスタム認証コードと必要なコードを追加してルーチンを編集します。
InterSystems IRIS では ZAUTHENTICATE の認証コードに対する制約を行わないため、アプリケーション・プログラマは、コードが十分に安全であるかどうかを確認する必要があります。
シグニチャ
ZAUTHENTICATE のシグニチャは以下のとおりです。
ZAUTHENTICATE(ServiceName, Namespace, Username, Password, Credentials,
Properties) PUBLIC {
// authentication code
// optional code to specify user account properties and roles
}
以下はその説明です。
-
ServiceName — ユーザから InterSystems IRIS への接続を仲介しているサービスの名前を表す文字列 (%Service_Console や %Service_WebGateway など)。
-
Namespace — 目的とする接続先の InterSystems IRIS サーバにあるネームスペースを表す文字列。これは、スタジオや ODBC など、%Service_Bindings サービスで使用します。
-
Username — ルーチンのコードによって検証されるユーザが入力したアカウントの名前を表す文字列。
-
Password — 検証されるユーザが入力したパスワードを表す文字列。
-
Credentials — 参照渡し。今回のバージョンの InterSystems IRIS では、実装されていません。
-
Properties — 参照渡し。Username で指定したアカウントの特性を定義する返り値の配列。
InterSystems IRIS が ZAUTHENTICATE を呼び出すと、これらの引数の値がルーチンに提供されます。
インターシステムズ製品の古いバージョンでは、ZAUTHENTICATE は引数を 4 つ取ります。下位互換性を保つために、引き続き引数が 4 つのバージョンを使用できます。コードを古いバージョンから新しいバージョンに更新する場合、新しい引数は 2 番目と 5 番目になることに注意してください。すなわち、Namespace と Credentials です。
認証コード
認証コードのコンテンツはアプリケーションに固有です。認証が成功すると、ルーチンから $$$OK マクロが返されます。失敗した場合はエラー・コードが返されます。返り値の詳細は、"返り値とエラー・メッセージ" を参照してください。
InterSystems IRIS では ZAUTHENTICATE の認証コードに対する制約を行わないため、アプリケーション・プログラマは、コードが十分に安全であるかどうかを確認する必要があります。
GetCredentials エントリ・ポイント
ZAUTHENTICATE は GetCredentials エントリ・ポイントを含んでいます。エントリ・ポイントは代行認証がサービスに対して有効となるたびに、ユーザ名およびパスワードの入力が要求される前に呼び出されます。ユーザからユーザ名およびパスワードを得る代わりに、(アプリケーション開発者が作成した) 関数のコードがユーザ名およびパスワードを指定します。その後、返されたユーザ名およびパスワードは、ユーザが入力したかのように通常の方法にて認証されます。このメカニズムを使用することで、ユーザ名およびパスワードをエントリ・ポイント内さらには認証コード内で、プロセスの $roles に対して提供することができます。
このエントリ・ポイントより返されるユーザ名とパスワードは、アプリケーション開発者が選択する任意のメカニズムにより取得できます。これらは、グローバルから取得することも、外部の DLL または LDAP 呼び出しから取得することも、または単純にルーチン内で設定することもできます。さらに、アプリケーション開発者は、ターミナル接続やログイン・ページなどでユーザ名およびパスワードの入力を要求するコードを提供することもできます。
GetCredentials エントリ・ポイントの呼び出しがある場合、戻り値およびその他の要素によって次の動作が決まります。
-
コードが Username および Password の値を設定し、成功ステータス ($$$OK) も返した場合は、以下のように動作します。
-
さらにユーザ名とパスワードの入力が求められることはありません。
-
認証プロセスが続行されます。
Important:アクセス・ポイントから $$$OK が返された場合、コードは Username および Password の値を設定する必要があります。それ以外の場合、ユーザはシステムへのアクセスを拒否され、エラーが監査ログに書き込まれます。
-
-
エントリ・ポイントからエラー・ステータス $SYSTEM.Status.Error($$$GetCredentialsFailed) が返された場合は、通常のユーザ名とパスワードの入力が求められます。
-
エントリ・ポイントからその他のエラー・ステータスが返された場合は、以下のように動作します。
-
ユーザはシステムへのアクセスを拒否されます。
-
エラーが監査ログに記録されます。
-
GetCredentials エントリ・ポイントの以下の例では、コードは各種サービスに対してさまざまな動作を実行します。
-
%Service_Console では、ユーザに情報を要求せずに、プロセスのユーザ名とパスワードをそれぞれ _SYSTEM および SYS に設定します。
-
%Service_Bindings では、ユーザにユーザ名とパスワードの入力を強制します。
-
Web アプリケーションでは、使用中のアプリケーションが /csp/ サンプル・アプリケーションであるかどうかをチェックします。そうである場合は、ユーザ名とパスワードを AdminUser および Test に設定します。他の Web アプリケーションである場合は、アクセスはすべて拒否されます。
-
その他のどのサービスの場合も、アクセスは拒否されます。
最後に、Error エントリ・ポイントは必要に応じてクリーンアップを行います。
このコードは以下のとおりです。
GetCredentials(ServiceName,Namespace,Username,Password,Credentials) Public {
// For console sessions, authenticate as _SYSTEM.
If ServiceName="%Service_Console" {
Set Username="_SYSTEM"
Set Password="SYS"
Quit $SYSTEM.Status.OK()
}
// For a web application, authenticate as AdminUser.
If $isobject($get(%request)) {
If %request.Application="/csp/samples/" {
Set Username="AdminUser"
Set Password="Test"
Quit $System.Status.OK()
}
}
// For bindings connections, use regular prompting.
If ServiceName="%Service_Bindings" {
Quit $SYSTEM.Status.Error($$$GetCredentialsFailed)
}
// For all other connections, deny access.
Quit $SYSTEM.Status.Error($$$AccessDenied)
}
詳細は、ZAUTHENTICATE.mac の、このエントリ・ポイントのコメントを参照してください。
SendTwoFactorToken エントリ・ポイント
ZAUTHENTICATE は SendTwoFactorToken エントリ・ポイントを含んでいます。このエントリ・ポイントは 2 要素認証と共に使用します。これが定義されており、InterSystems IRIS インスタンスで 2 要素認証が有効な場合、インスタンスがユーザの携帯電話に送信するメッセージおよびトークンの形式の既定のシステム設定をオーバーライドできます。これによって、同じ InterSystems IRIS インスタンス上でもアプリケーションごとに異なるメッセージを使用できます。
このエントリ・ポイントの詳細と使用例は、サンプル ZAUTHENTICATE.mac でこのエントリ・ポイントを参照してください。
ロールと他のユーザ特性の値の設定
最初の認証が成功すると、ZAUTHENTICATE は認証されたユーザのロールと他の特性を確立できます。以降のログインでは、ユーザ・レコードのこれらの要素を更新できます。
これを行うために、ZAUTHENTICATE のコードにより Properties 配列の値が設定されます(Properties は、ZAUTHENTICATE への参照によって渡されます)。通常、設定する値のソースは、ZAUTHENTICATE が使用できるユーザ情報のリポジトリです。
ユーザのプロパティ
Properties 配列の要素は以下のとおりです。
-
Properties("Comment") — 任意のテキスト
-
Properties("FullName") — ユーザの名前と姓
-
Properties("NameSpace") — ターミナル・ログインの既定のネームスペース
-
Properties("Roles") — ユーザが InterSystems IRIS で保持するコンマ区切りのロール・リスト。
-
Properties("Routine") — ターミナル・ログインに対して実行されるルーチン
-
Properties("Password") — ユーザのパスワード
-
Properties("Username") — ユーザのユーザ名
-
Properties("PhoneNumber") — ユーザの携帯電話番号で、2 要素認証で使用
-
Properties("PhoneProvider") — ユーザの携帯電話のサービス・プロバイダで、2 要素認証で使用
各要素については、この後のセクションでそれぞれ詳しく説明します。
プロパティの配列の各要素の値によって、それぞれの要素に関連する、認証対象のユーザのプロパティ値が設定されます。これらのプロパティのサブセットのみを使用したり、認証後にプロパティ値を操作したりすることはできません。
Comment
ZAUTHENTICATE で Properties("Comment") の値を設定すると、その文字列が InterSystems IRIS におけるユーザ・アカウントの Comment プロパティの値になります(このプロパティは、"ユーザ・アカウントのプロパティ" で説明しています)。呼び出し元のルーチンに値が渡されない場合、ユーザ・アカウントの Comment の値は NULL 文字列になり、管理ポータルの関連フィールドにはコンテンツが表示されません。
FullName
ZAUTHENTICATE で Properties("FullName") の値を設定すると、その文字列が InterSystems IRIS におけるユーザ・アカウントの Full name プロパティの値になります(このプロパティは、"ユーザ・アカウントのプロパティ" で説明しています)。呼び出し元のルーチンに値が渡されない場合、ユーザ・アカウントの Full name の値は NULL 文字列になり、管理ポータルの関連フィールドにはコンテンツが表示されません。
Namespace
ZAUTHENTICATE で Properties("Namespace") の値を設定すると、その文字列が InterSystems IRIS におけるユーザ・アカウントの Startup Namespace プロパティの値になります(このプロパティは、"ユーザ・アカウントのプロパティ" で説明しています)。呼び出し元のルーチンに値が渡されない場合、ユーザ・アカウントの Startup Namespace の値は NULL 文字列になり、管理ポータルの関連フィールドにはコンテンツが表示されません。
InterSystems IRIS に接続すると、Startup Namespace の値 (Properties("Namespace") の値) は、ローカル・アクセス (コンソール、ターミナル、Telnet など) に認証されたユーザの最初のネームスペースを決定します。Startup Namespace に値が指定されない場合 (Properties("Namespace") に値が指定されないため)、ローカル・アクセスに認証されたユーザの最初のネームスペースは以下のように決定されます。
-
USER ネームスペースが存在する場合、これが最初のネームスペースになります。
-
USER ネームスペースが存在しない場合、最初のネームスペースは %SYS ネームスペースになります。
ユーザが最初のネームスペースに対する適切な特権を保持していない場合、アクセスは拒否されます。
Password
ZAUTHENTICATE で Properties("Password") の値を設定すると、その文字列が InterSystems IRIS におけるユーザ・アカウントの Password プロパティの値になります(このプロパティは、"ユーザ・アカウントのプロパティ" で説明しています)。呼び出し元のルーチンに値が渡されない場合、ユーザ・アカウントの Password の値は NULL 文字列になり、管理ポータルの関連フィールドにはコンテンツが表示されません。
Roles
ZAUTHENTICATE で Properties("Roles") の値を設定すると、その文字列によってユーザの割り当て先の Roles が指定されます。この値はコンマ区切りのロール・リストを含む文字列です。呼び出し元のルーチンに値が渡されない場合、ユーザ・アカウントの Roles の値は NULL 文字列になり、管理ポータルの関連フィールドにはコンテンツが表示されません。ユーザのロールに関する情報は、[ユーザ編集] ページの [ロール] タブで確認できます。
Properties("Roles") で返されるロールが定義されない場合、ユーザはロールに割り当てられません。
したがって、ログインしたユーザは以下のようにロールに割り当てられます。
-
ロールが Properties("Roles") に示され、InterSystems IRIS インスタンスで定義される場合、ユーザはそのロールに割り当てられます。
-
ロールが Properties("Roles") に示され、InterSystems IRIS インスタンスで定義されない場合、ユーザはそのロールに割り当てられません。
-
ユーザは、_PUBLIC ユーザに関連付けられたロールには常に割り当てられます。また、すべてのパブリック・リソースにアクセスできます。_PUBLIC ユーザの詳細は、"_PUBLIC アカウント" を参照してください。パブリック・リソースの詳細は、"サービスとそのリソース" を参照してください。
Routine
ZAUTHENTICATE で Properties("Routine") の値を設定すると、その文字列が InterSystems IRIS におけるユーザ・アカウントの Startup Tag^Routine プロパティの値になります(このプロパティは、"ユーザ・アカウントのプロパティ" で説明しています)。呼び出し元のルーチンに値が渡されない場合、ユーザ・アカウントの Startup Tag^Routine の値は NULL 文字列になり、管理ポータルの関連フィールドにはコンテンツが表示されません。
Properties("Routine") に値がある場合、この値によって、ターミナル・タイプのサービス (コンソール、ターミナル、Telnet など) でログイン後に自動的に実行するルーチンが指定されます。Properties("Routine") に値を指定しない場合、ログインはプログラマ・モードでターミナル・セッションを開始します。
Username
ZAUTHENTICATE で Username プロパティを返す場合、Username の値は関数での処理の後にセキュリティ・データベースに書き込まれます。このため、ユーザがプロンプトで入力した値が変更される可能性があります。ZAUTHENTICATE で Username プロパティを返さない場合、プロパティの値は入力時にセキュリティ・データベースに書き込まれます。
ZAUTHENTICATE で Properties("Username") の値を設定すると、その文字列が InterSystems IRIS におけるユーザ・アカウントの Name プロパティの値になります(このプロパティは、"ユーザ・アカウントのプロパティ" で説明しています)。これにより、アプリケーション・プログラマは、ログイン・プロンプトでエンドユーザが入力した内容を正規化できます。
Properties("Username") の値を呼び出し元のルーチンに渡す明示的な呼び出しがない場合、正規化は行われず、プロンプトでエンドユーザが入力する値が、変更されずに、そのユーザ・アカウントの Name プロパティの値としてそのまま使用されます。
PhoneNumber と PhoneProvider
これらは 2 要素認証と関連付けられたプロパティです。
ZAUTHENTICATE が Properties("PhoneNumber") と Properties("PhoneProvider") の値を設定すると、これらはユーザの携帯電話番号および携帯電話サービス・プロバイダとしてユーザの InterSystems IRIS データベースに書き込まれます。これらが呼び出しルーチンに渡されない場合、InterSystems IRIS データベースに書き込まれた電話番号とサービス・プロバイダは NULL 文字列です。したがって、代行認証で 2 要素認証を使用するには、これらの両方を提供する必要があります。
ユーザ情報のリポジトリ
ZAUTHENTICATE は、グローバルや外部ファイルなど、ユーザ情報のリポジトリであればどのような種類でも参照できます。認証されたユーザをこの情報で作成または更新できるように、ルーチンのコードによって Properties 配列で外部プロパティを設定します。例えば、あるリポジトリにロールやネームスペースなどの情報が含まれる一方で、ZAUTHENTICATE コードは InterSystems IRIS がその情報を利用できるようにする必要があります。
リポジトリ内の情報が変更されると、このアクションを実行するコードが ZAUTHENTICATE にある場合、この情報は InterSystems IRIS ユーザ情報に伝播されます。また、このようなコードがある場合、リポジトリでユーザのロールが変更されなければなりません。セッション中にユーザのロールを変更した場合、その変更は次のログインまで有効になりません。次のログインの時点で、そのユーザのロールは ZAUTHENTICATE によってリセットされます。
返り値とエラー・メッセージ
ルーチンは以下のいずれかの値を返します。
-
成功 — $$$OK。ユーザ名とパスワードの組み合わせが正常に認証されたことを示します。
-
失敗 — $SYSTEM.Status.Error($$$ERRORMESSAGE)。認証が失敗したことを示します。
ZAUTHENTICATE は、システム定義またはアプリケーション固有のエラー・メッセージを返すことができます。これらのメッセージはすべて、%SYSTEM.StatusOpens in a new tab クラスの Error メソッドを使用します。このメソッドは、$SYSTEM.Status.Error として呼び出され、エラーの状況に応じて、1 つまたは 2 つの引数を取ります。
使用可能なシステム定義のエラー・メッセージは以下のとおりです。
-
$SYSTEM.Status.Error($$$AccessDenied) — “アクセスが拒否されました” のエラー・メッセージ
-
$SYSTEM.Status.Error($$$InvalidUsernameOrPassword) — “ユーザ名またはパスワードが無効です” のエラー・メッセージ
-
$SYSTEM.Status.Error($$$UserNotAuthorizedOnSystem,Username) — “ユーザ Username は許可されていません” のエラー・メッセージ
-
$SYSTEM.Status.Error($$$UserAccountIsDisabled,Username) — “ユーザ Username アカウントが無効です” のエラー・メッセージ
-
$SYSTEM.Status.Error($$$UserInvalidUsernameOrPassword,Username) — “ユーザ Username の名前またはパスワードは無効です” のエラー・メッセージ
-
$SYSTEM.Status.Error($$$UserLoginTimeout) — “ログインタイムアウト” のエラー・メッセージ
-
$SYSTEM.Status.Error($$$UserCTRLC) — “ログインは中止されました” のエラー・メッセージ
-
$SYSTEM.Status.Error($$$UserDoesNotExist,Username) — “ユーザ Username は存在しません” のエラー・メッセージ
-
$SYSTEM.Status.Error($$$UserInvalid,Username) — “ユーザ名 Username が無効です” のエラー・メッセージ
-
$SYSTEM.Status.Error($$$PasswordChangeRequired) — “パスワードの変更が必要です” のエラー・メッセージ
-
$SYSTEM.Status.Error($$$UserAccountIsExpired,Username) — “ユーザ Username のアカウントは失効しました” のエラー・メッセージ
-
$SYSTEM.Status.Error($$$UserAccountIsInactive,Username) — “ユーザ Username のアカウントはアクティブではありません” のエラー・メッセージ
-
$SYSTEM.Status.Error($$$UserInvalidPassword) — “無効なパスワードです” のエラー・メッセージ
-
$SYSTEM.Status.Error($$$ServiceDisabled,ServiceName) — “サービス Servicename のログインは無効です” のエラー・メッセージ
-
$SYSTEM.Status.Error($$$ServiceLoginsDisabled) — “ログインは無効です” のエラー・メッセージ
-
$SYSTEM.Status.Error($$$ServiceNotAuthorized,ServiceName) — “ユーザはサービスを許可されていません” のエラー・メッセージ
カスタム・メッセージを生成するには、$SYSTEM.Status.Error() メソッドを使用して、このメソッドに $$$GeneralError マクロを渡し、2 番目の引数として任意のカスタム・テキストを指定します。以下に例を示します。
$SYSTEM.Status.Error($$$GeneralError,"Any text here")
エラー・メッセージが呼び出し元に返されると、そのメッセージは監査データベース (LoginFailure イベント監査が有効な場合) にログとして記録されます。表示されるエラー・メッセージは $SYSTEM.Status.Error($$$AccessDenied) のみです。ただし、$$$PasswordChangeRequired エラーのメッセージも表示されます。現在のパスワードから新しいパスワードへの変更をユーザに要求する場合、このエラーを返します。
代行認証の設定
認証 (および、オプションで承認タスク) を実行する ZAUTHENTICATE ルーチンを作成したら、次に、インスタンスの関連サービスまたはアプリケーションでそのルーチンを有効にします。手順は以下のとおりです。
-
インスタンス全体の代行認証を有効にします。[認証/Web セッション・オプション] ページ ([システム管理] > [セキュリティ] > [システム・セキュリティ] > [認証/Web セッション・オプション]) で、[代行認証を許可] を選択し、[保存] をクリックします。
インスタンスで代行認証を有効にすると、関連サービスの [サービス編集] ページと、関連アプリケーションの [ウェブ・アプリケーション編集] ページに [代行] チェック・ボックスが表示されます。
-
必要に応じて、サービスとアプリケーションの代行認証を有効にします。
以下のサービスは認証代行をサポートしています。
-
%Service_Bindings
-
%Service_CallIn
-
%Service_ComPort
-
%Service_Console
-
%Service_Login
-
%Service_Terminal
-
%Service_Telnet
-
%Service_WebGateway
これらのサービスは、アクセス・モードによっていくつかのカテゴリに分類されます。
-
%Service_CallIn、%Service_ComPort、%Service_Console、%Service_Login、%Service_Terminal、%Service_Telnet
ローカル接続で代行認証を使用するには、サービスの代行認証を有効にします。
-
%Service_Bindings
クライアント・サーバ接続で代行認証を使用するには、サービスの代行認証を有効にします。
-
Web アクセス —
%Service_WebGateway
Web ベースの接続で代行認証を使用するには、Web アプリケーションの代行認証を有効にします。また、サービス %Service_WebGateway を有効にすることで、Web ゲートウェイでこれを有効にすることもできます。
代行認証成功後の注意事項
ユーザが認証された後の重要な項目は以下のとおりです。
システムの状態
代行認証を使用して最初に認証されるユーザは、“代行ユーザ” というタイプで [ユーザ] ページ ([システム管理] > [セキュリティ] > [ユーザ]) のユーザ・テーブルに表示されます。システム管理者が管理ポータル (またはその他の InterSystems IRIS ネイティブ機能) を使用して明示的にユーザを作成した場合、そのユーザのタイプは “InterSystems IRIS パスワード・ユーザ” になります。ユーザが代行認証を使用してログインを試行し、認証が正常に行われる場合でも、そのユーザが既に (代行ユーザではなく) InterSystems IRIS ユーザとして存在することを InterSystems IRIS が検出すると、ログインは失敗します。
シャード・クラスタでシャード操作を実行するには、代行ユーザがシャード・クラスタの各ノードで内部シャード接続以外の方法によって事前に認証されている必要があります。シャードの詳細は、"シャーディングによるデータ量に応じた InterSystems IRIS の水平方向の拡張" を参照してください。
パスワードの変更
ZAUTHENTICATE ルーチンには、エントリ・ポイント ChangePassword も含まれており、そこにはユーザのパスワードを変更するコードが含まれています。このエントリ・ポイントのシグニチャは以下のとおりです。
ChangePassword(Username,NewPassword,OldPassword,Status) Public {}
以下はその説明です。
-
Username は、パスワードを変更するユーザを指定する文字列です。
-
NewPassword は、ユーザのパスワードの新しい値を指定する文字列です。
-
OldPassword は、ユーザのパスワードの古い値を指定する文字列です。
-
Status (参照によって渡される) は、InterSystems IRIS の状態値を受信します。受信した値では、パスワード変更が成功したことを示すか、ルーチンの失敗の原因となったエラーを指定します。
代行認証または他のメカニズムでの LDAP の使用
カスタム認証システムの一部として (つまり、InterSystems IRIS の代行認証機能で) LDAP を使用することもできます。そのためには、ZAUTHENTICATE ルーチンのカスタム認証コードの一部として %SYS.LDAPOpens in a new tab クラスの呼び出しを使用します。
インターシステムズでは、これらの呼び出し方法を示すサンプル・ルーチン LDAP.mac を提供しています。このルーチンは GitHub の Samples-Security サンプルに含まれています (https://github.com/intersystems/Samples-SecurityOpens in a new tab)。
さらに、LDAP に対して認証する必要がある場合、または別のメカニズムによって認証情報を収集した後にインスタンス認証を使用する必要がある場合は、それらの認証情報で $SYSTEM.Security.Login を呼び出してユーザを認証します。