4

次の関連プロパティを持つ ASP.NET MVC5 Web アプリに取り組んでいます。

  • MVC5.1、Identity 2.0 を使用し、従来のものに限定されず、最新のものをすべて使用できます。
  • ユーザーは少なくとも 1 つの組織に属しています。
  • 各組織には、組織管理者であるユーザーが少なくとも 1 人います。
  • 組織管理者は、別の組織管理者になるなど、ユーザー固有の権限を許可できます。
  • 私が理解していることから、これを処理する良い方法は、クレームを使用することです。

既定のクレームに加えて、ユーザーは通常、次のクレームを持つことができます。

組織: {いくつかの GUID} 組織管理者: {上記と同じ GUID} 組織発行者: {再び同じ GUID}

スーパー管理者やスーパーユーザーが存在する可能性があり、複数の組織のさまざまな役割へのアクセス権を主張している可能性があります。

ここで、管理パネルにログオンしているユーザーであり、Organization-Admin クレームを持っている組織の Organization-Publisher クレームをadminユーザーに付与したいとします。user

簡単にするために、次のようなモデル オブジェクトがあります。

public class GrantRightModel
{
   public string OrganizationId { get; set; }
   public string UserId { get; set; }
   public string Right { get; set; }
}

この例では、adminユーザーから次の値を取得します。

  • adminOrganizationId: Organization-Admin クレームを持つ組織の GUID 。
  • ユーザーID:user
  • 右: 組織 - 発行者

このやり方について私を回避してきたことがたくさんあります。GrantRight アクションを持つ OrgAdmin コントローラーがあるとします。

  • コントローラー アクションは、現在ログインしているユーザー (たとえば ClaimsPrincipal.Current を使用して検出) が GrantRightModel.OrganizationId の Organizaton-Admin クレームを「手動で」持っていることを確認する必要がありますか?

  • Organization-Publisher: {guid} クレームを に追加するコードの正しい方法は何userですか? 私のコントローラーは、依存性注入によって必要に応じて UserManager を取得します。

  • これuserが発生したときにアプリケーションにサインインしている場合、次の要求から自動的に正しいクレームを取得する方法はありますか? ユーザーをログアウトさせて、再度ログインし、新しいクレームで新しいセッションを開始する方法について言及したことがあります。その理由はわかりますが、ユーザーが長時間かかる作業をしている可能性があることを考えると、作業を送信しようとしたときにログアウトさせるのは一般的ではないかもしれません。

これについてはウェブ上に少しの情報がありますが、私の google-fu は、これらの 3 つのポイントを打ち負かす方法を示すものを見つけることができませんでした。

誰?

ありがとう!

4

1 に答える 1

3

ご質問を承ります。

コントローラー アクションは、現在ログインしているユーザー (たとえば ClaimsPrincipal.Current を使用して検出) が GrantRightModel.OrganizationId の Organizaton-Admin クレームを「手動で」持っていることを確認する必要がありますか?

いいえ。このAuthorize属性は、承認時にチェックされる役割のオプションのリストを取ります。ロール クレームの 1 つがそのロールを指している場合、カスタム コードを使用せずに使用が承認されます。

Organization-Publisher: {guid} クレームをユーザーに追加するコードの正しい方法は何ですか? 私のコントローラーは、依存性注入によって必要に応じて UserManager を取得します。

適切なクレームを使用して を作成しClaimsIdentity、承認マネージャーに ID を使用してサインインするように依頼します。その後、ID は通常、クレームと共に Cookie に保持されます。

これが発生したときにユーザーがアプリケーションにサインインしている場合、次のリクエストから正しいクレームを自動的に取得する方法はありますか? ユーザーをログアウトさせて、再度ログインし、新しいクレームで新しいセッションを開始する方法について言及したことがあります。その理由はわかりますが、ユーザーが長時間かかる作業をしている可能性があることを考えると、作業を送信しようとしたときにログアウトさせるのは一般的ではないかもしれません。

2回読んだけどよくわからない。Cookie を発行すると、Cookie は認証されたセッションを保持する役割を果たします。その後、Cookie に基づいて各要求パイプラインの早い段階でクレームが再構築されます。その後、ユーザーは多数のリクエストを発行できますが、Cookie が無効化されていないか、Cookie に保存されている認証トークンが期限切れにならない限り、ユーザーは「ログイン」したままです。

于 2014-04-11T17:38:58.103 に答える