Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

例 3 : 代行認証

この例では、ターミナルに対して代行認証を構成し、テストします。この例では、Caché に以下のコード・ファイルをインストールする必要があります。

  • CreateDelegatedUser.cls — ユーザを作成するための Zen ページ。これは、MYUSERS というグローバルにユーザ名とパスワードを保存しています。クラス定義は Zen_Authenticate.xml に入っています。これには、このチュートリアルの他の例で使用される Zen コードが含まれます。

  • ZAUTHENTICATE.mac — Caché へのアクセスを試行したときにユーザが入力したユーザ名とパスワードを、MYUSERS グローバルで確認する代行認証ルーチン。このルーチンは ZAuth.xml に保存されています。

ZAUTHENTICATE ルーチンは以下のとおりです。


ZAUTHENTICATE(ServiceName,Username,Password,Properties) PUBLIC {
 #include %occErrors
 set $ZTrap="Error"
 set Name=$ZConvert(Username,"U")
 set Name=$piece(Username,"@",1)
 set UserRecord=$get(^MYUSERS(Name))
 if (UserRecord="")
 {
 quit $SYSTEM.Status.Error($$$UserDoesNotExist,Username)
 }
 if ($SYSTEM.Encryption.SHA1Hash(Password)'= $List(UserRecord,1)) 
 {
 quit $SYSTEM.Status.Error($$$UserInvalidPassword)
 }
 set Properties("FullName")=$piece(UserRecord,",",2)
 set Properties("Comment")=""
 set Properties("Roles")="%All"
 set Properties("NameSpace")=""
 set Properties("Routine")=""
 set Properties("Password")=Password
 set Properties("Username")=Name
 quit $SYSTEM.Status.OK()
Error
 set $ZTrap=""
 quit $SYSTEM.Status.Error(5002 /*$$$CacheError*/,$ZError)
}
        

このコードは、以下のように動作します。

  • MYUSERS でユーザにより入力されたユーザ名を検索します。

  • 入力されたユーザ名が MYUSERS に含まれていた場合、このユーザの情報を取得し、続行します。含まれていなかった場合は、エラーを表示して終了します。

  • MYUSERS に保存されているパスワードの値と、ユーザにより入力されたパスワードを比較します。ただし、このパスワードは保存前にハッシュされています。値が一致した場合、ルーチンは続行します。不一致の場合は、エラーを表示して終了します。

  • 有効なユーザについて、そのユーザ情報を Properties 配列に保存します。Caché は、この配列から情報を取得します。この情報は管理ポータルで表示することができます。

Note:

Zen_Authenticate.xml および ZAuth.xml は両方とも install-dir\Dev\tutorials\security に保存されています。

FeedbackOpens in a new tab