方法: HTML クライアント アプリケーションで認証を有効にする
LightSwitch では、承認されていないユーザーがデータの読み取り、変更、削除を実行できないようにして、HTML クライアント アプリのセキュリティを高めることができます。 認証を実装した場合、ユーザーは、アプリケーションにアクセスする前に、本人であることを証明する必要があります。
注意
Silverlight クライアントでは、アクセス許可を設定する方法が異なります。「方法: Silverlight クライアント アプリケーションで認証を有効にする」を参照してください。 SharePoint が有効になっている LightSwitch アプリは、SharePoint 認証を使用してアクセスを制御します。
ユーザー数が多い場合は、特定の画面とデータへのアクセスにさまざまなレベルがあるユーザー ロールを作成し、各ユーザーを適切なロールに割り当てることで、アクセスをより簡単に管理できます。 たとえば、給与アプリケーションを使用すると、従業員は自分の給与情報を変更できませんが、表示できます。 ただし、給与スーパーバイザーには、従業員の情報を表示および変更するアクセス許可が与えられる可能性があります。 従業員には従業員ロールが割り当てられ、スーパーバイザーにはスーパーバイザー ロールが割り当てられます。
また、ユーザーを Active Directory のセキュリティ グループに追加し、それらのグループにアクセス許可を割り当てることによって、より簡単にアクセス許可を管理できます。 メンバーシップとアクセス許可は継承されるため、一度の変更で、単一のグループだけでなくすべてのサブグループに対してアクセスの許可と拒否を行うことができます。 たとえば、Active Directory の Sales グループに Bob を追加できます。 Sales が Marketing のサブグループである場合は、Marketing に付与するアクセス許可はすべて、Bob にも付与されます。
認証および承認は、Visual Basic または C# のコードを記述すると、サーバーで実装できます。画面レベルで実装するには、サーバーでクエリを追加し、そのクエリに基づいて HTML 画面が表示されるようにします。そして、アクセス許可に基づいて画面を有効または無効にする JavaScript コードを記述します。 また、ユーザーとロールを管理するために Silverlight クライアントを追加することも必要です。 Silverlight ベースの [ユーザー] 画面と [ロール] の画面が、発行時にアプリケーション管理者として指定されたユーザーに表示されます。
認証
アプリケーションを保護する最初の手順は、認証を有効にすることです。 Windows 認証またはフォーム認証を使用できます。 フォーム認証は、アプリケーション自体によって管理され、ユーザーは、アプリケーションにアクセスするためにユーザー名とパスワードを入力する必要があります。 Windows 認証では、アプリケーションの実行場所であるコンピューターへのログオンに使用された資格情報が、アプリケーション ユーザーの認証に使用されます。追加のユーザー名もパスワードも必要ありません。 両方のケースで、アプリケーション管理者は、権限を持つユーザーのリストを保持します。フォーム認証では、この管理者が、暗号化されたパスワードも保持します。
認証を有効にするには
ソリューション エクスプローラーで [プロパティ] ノードのショートカット メニューを表示し、[開く] を選択します。
アプリケーション デザイナーで [アクセス制御] タブを選択します。
[使用する認証の種類の選択] の一覧の [Windows 認証を使用する] または [フォーム認証を使用する] を選択します。
[Windows 認証を使用する] を選択した場合は、[アプリケーションの [ユーザー] 画面で指定されたユーザーのみ許可する] と [認証されたすべての Windows ユーザーを許可する] のいずれかのオプション ボタンをクリックします。
これでアプリケーションでは、ユーザーがアプリケーションにアクセスするために資格情報の入力が必要になります。
アクセス許可
HTML クライアント アプリケーションを保護するための次の手順は、アクセス許可を作成することです。 最初に、アプリケーション デザイナーでアクセス許可オブジェクトを定義します。 これで、<Entity>CanUpdate など、Can メソッドのいずれかのコード内のオブジェクトを参照できます。 これらのメソッドのコードは、通常、現在のユーザーまたはロールに権限があるかどうかを確認し、その後に、アクセス許可が検証された場合にのみ、操作を許可します。
コードをテストするには、アクセス許可を持つユーザーと持たないユーザーの両方としてアプリケーションを実行します。デバッグ アクセス許可を設定すると、アプリケーションをテストまたはデバッグするときに、ユーザーとして実行できます。
アクセス許可を作成するには
ソリューション エクスプローラーで [プロパティ] ノードのショートカット メニューを表示し、[開く] を選択します。
アプリケーション デザイナーで [アクセス制御] タブを選択します。
[デバッグに使用するアクセス許可を定義または選択してください] グリッドで、[名前] 列の [<新しいアクセス許可の追加>] をクリックしてから、アクセス許可のプログラム名を入力します。
名前の先頭はアルファベットの文字である必要があり、名前にはアルファベット文字または数字、またはアンダースコアを含めることができます。
[表示名] 列にアクセス許可の名前を入力します。この名前が、アプリケーション管理者がロールの割り当てに使用する画面に表示されます。
[説明] 列にアクセス許可の説明を入力します。
デバッグ用のアクセス許可を有効にするには
ソリューション エクスプローラーで [プロパティ] ノードのショートカット メニューを表示し、[開く] を選択します。
アプリケーション デザイナーで [アクセス制御] タブを選択します。
[デバッグに使用するアクセス許可を定義または選択してください] グリッドで、デバッグのために有効にするアクセス許可を選択してから、[デバッグ用に許可] チェックボックスをオンにします。
サーバーのセキュリティ
次の手順は、アクセス制御メソッドを使用して、サーバー層のアクセス許可をチェックするコードを追加することです。 CanUpdate などのエンティティ メソッド、または CanExecute などのクエリ メソッドにコードを記述できます。 ベスト プラクティスとして、アクセス制御メソッドを使用してサーバー層を常に保護し、システムのデータを保護する必要があります。
エンティティのアクセス許可を設定するコードを記述するには
ソリューション エクスプローラーで、エンティティ ノードのショートカット メニューを開き、[開く] をクリックします。
そのエンティティのエンティティ デザイナーが開きます。
エンティティ デザイナーの [パースペクティブ] バーで [サーバー] をクリックします。
[コードの記述] ボックスの一覧を展開し、EntityName**_Can**Operation メソッドを選択します。ここで、EntityName はエンティティの名前であり、Operation は操作の名前です。この操作のコードを記述します。
注意
使用できるメソッドは、コンテキストによって異なります。CanInsert、CanDelete、および CanUpdate は、その例です。
コード エディターで、必要なコードを EntityName**_Can**Operation メソッドに入力します。
たとえば、Can_Edit_Products という名前のアクセス許可に基づいて Products エンティティを更新することをユーザーに許可するコードは、次のようになります。
Private Sub Products_CanUpdate(ByRef result As Boolean) If Application.User.HasPermission(Can_Edit_Products) Then result = True Else result = False End If End Sub
private void Products_CanUpdate(ref bool result) { if (Application.User.HasPermission(Can_Edit_Products)) { result = true; } else { result = false; } }
クエリのアクセス許可を設定するコードを記述するには
ソリューション エクスプローラーで、クエリ ノードのショートカット メニューを開き、[開く] をクリックします。
そのクエリのクエリ デザイナーが開きます。
[コードの記述] ボックスの一覧で、QueryName**_CanExecute** メソッドのいずれかを選択します。ここで、QueryName は、選択したクエリの名前です。
コード エディターで、必要なコードを QueryName**_CanExecute** メソッドに入力します。
たとえば、Can_View_Products という名前のアクセス許可に基づいて ViewProducts クエリを実行することをユーザーに許可するコードは、次のようになります。
Private Sub ViewProducts_CanExecute(ByRef result As Boolean) If Application.User.HasPermission(Can_View_Products) Then result = True Else result = False End If End Sub
private void ViewProducts_CanExecute(ref bool result) { if (Application.User.HasPermission(Can_View_Products)) { result = true; } else { result = false; } }
クライアントのセキュリティ
一般的なシナリオは、画面へのアクセスを、承認されたユーザーだけに制限することです。 たとえば、価格情報を、すべてのユーザーに表示されるようにしますが、変更できるのは、経理部のユーザーのみにします。 HTML クライアントの画面でこれを行うには、最初に、CanExecute メソッドのアクセス許可をチェックするクエリを作成してから、画面の created メソッドに JavaScript コードを記述して、UI 要素を有効または無効にします。
注意
アクセス許可をチェックするコードの例については、このトピックの前半にある「コードを記述して、クエリのアクセス許可を設定するには」を参照してください。
画面にクエリを追加するには
画面デザイナーのツール バーで、[データ項目の追加] ボタンをクリックします。
[データ項目の追加] ダイアログ ボックスで [クエリ] オプション ボタンを選択し、一覧でクエリを選択します。
コンテンツ ツリーで、有効または無効にする UI 要素を選択します。 これは、通常、アクセスを制限する画面を起動するボタンです。
[プロパティ] ウィンドウにある UI 要素の "名前" プロパティをメモします。 これは、コードを記述するために必要になります。
画面のアクセス許可を設定するコードを記述するには
画面デザイナーの [画面] ノードを選択し、ツール バーで [コードの記述] の一覧を展開し、[作成] をクリックします。
コード エディターで、ScreenName**_created** メソッドにコードを入力します。
たとえば、EditProducts という名前のクエリに基づいて、Edit という名前のボタンを有効または無効にするコードは、次のようになります。
myapp.ViewProducts.created = function (screen) { screen.getEditProducts().then (function success() { screen.findContentItem("Edit").isEnabled = true; }, function error() { screen.findContentItem("Edit").isEnabled = false; }) };
コードは画面でクエリを呼び出しますが、それを実行するアクセス許可がユーザーにない場合は失敗し、エラー ハンドラーが呼び出されます。 ボタンが有効になるのは、ユーザーのアクセス許可が確認されている場合のみです。 ボタンを無効ではなく、非表示にするには、isEnabled の代わりに isVisible を使用します。
注意
このメソッドは、他の理由でクエリが失敗する場合もボタンを無効にします。より複雑なコードを必要とする堅牢なソリューションについては、ブログの投稿「Using LightSwitch ServerApplicationContext and WebAPI to Get User Permissions (LightSwitch ServerApplicationContext と WebAPI によるユーザー アクセス許可の取得)」を参照してください。
管理
認証の有効化の最後の手順は、アプリケーションを管理するために必要な画面を追加することです。 HTML クライアント アプリケーションで、Silverlight クライアントをソリューションに追加する必要があります。 これによって、管理に必要な既定の [ユーザー] 画面と [ロール] 画面が提供されます。 Silverlight クライアント アプリケーションと画面は、発行時に既定の管理者として指定されたユーザー、または、その後で [管理] アクセス許可を付与されたユーザーにのみ表示されます。
管理画面を追加するには
ソリューション エクスプローラーで、最上位のアプリケーション ノードのショートカット メニューを開き、[クライアントの追加] をクリックします。
[クライアントの追加] ダイアログ ボックスで [デスクトップ クライアント] アイコンをクリックします。
[クライアント名] ボックスに、「Administration」などのクライアントの名前を入力し、[OK] ボタンをクリックします。
管理者を定義するには
「LightSwitch アプリケーションの管理」の手順に従います。
重要
認証が有効で、既定の管理者を定義していない場合は、発行したアプリケーションにアクセスできません。
参照
処理手順
方法: Silverlight クライアント アプリケーションで認証を有効にする