1

私は現在、asp.netコアを使用してシステムを設計していますが、クレームベースの認証を実装したいと思いますが、1つの特定の部分が私を混乱させています。ユーザークレームを管理するにはどうすればよいですか?

クレームが作成された場合、クレームにはそのタイプと値とオプションで発行者が含まれます。ハンドラでは、この請求および発行者は、アクセスが確認される前にチェックされる。

ただし、この発行者はIDデータベースに格納されていないため、ハンドラは発行者をどのようにチェックしますか?

私はこのすべての仕組みを誤解していますか?私の理解は、あるタイプのクレームを作成し、そのクレームは一定の価値を持ち、その発行者は実際にそのユーザーの価値を持つクレームタイプのバリデーターであるということを理解しました。

ハンドラは値をチェックし、発行者をチェックすることができますが、dbがそれを格納していない場合はチェックできません。私は発行者のポイントを理解していません。

私は、これらのクレームを誰が確認するのか、そしていつでもそのクレームを確認できるように、クレームのコレクションを持たせたいと思います。

私は理解して助けてください。

私はので、これをテストしている:

  1. アイデンティティとasp.netのコアアプリを使用します。
  2. ユーザーを登録します。
  3. タイプ、値、発行者を含むクレームをユーザーに追加します。 (例えば、employeeNumberが、312は、マイクロソフト。
  4. アクセスを制限する/アクションコントローラの[承認(ポリシー=「M​​icrosoftEmployeesOnlyを」)]を追加します。
  5. 要件にStartUp.csにおけるサービスにポリシーを追加します。
  6. ユーザーがEmployeeNumber型の主張をチェックし、値を持ち、マイクロソフトが発行するハンドラを持つ要件コードを追加します。
  7. ログインとユーザークレームはdbからIDに読み込まれます
  8. 発行者(Microsoft)が紛失してローカル・オーソリティと表示されているため、ハンドラはユーザーの検証に失敗します。

ここで私が考えることができるのは、クレームが一旦データベースに追加されると、マイクロソフトによって検証され、現在はマイクロソフトの代わりにアプリケーション(地方局)によって保有されていると考えられます。

それはその後、本当ならば:

  1. なぜどのハンドラ内のすべての発行者を確認しますか?
  2. 申し立てを取り消すにはどうすればよいですか?

私は、発行者がクレームを取り消し/無効にすることができることを意味するために、いつでもその発行者に行き、必要なときにクレームをチェックすることができます。従業員は、マイクロソフトで従業員番号を持っていると主張し、マイクロソフトは最初にそれを検証します。その後、マイクロソフトは従業員を蹴飛ばし、システムで彼を削除します。このアプリは、ユーザーがログインしてクレームが有効かどうかを確認するたびに、マイクロソフトと確認することができます。この場合、それはもはや有効ではないでしょう。

私は少し怒っていますか?

+0

ねえ。申し訳ありませんが、私は私の答えを修正するための十分な時間がないため、私の答えを削除しなければならなかった、それはあなたが探しているものではないように思える...私は別のユーザーが手伝いますよ。 –

+0

Matías - とにかくおかげです。 –

答えて

1

私はあなたが私は専門用語を与えて理解することができます主張、 の性質について少し誤解していると思うあなたはこの質問from my blogにリンクされているとして、ここではこれを投稿し、それが誰か

に有用である可能性があります。 「クレーム」は、ユーザーが特定の 属性を持っていることを「告白」しているとみなされており、これが真であることを確認する必要があります。

これは、ここでの主張の仕方ではありません。クレームは本質的にユーザの「属性」 です。ロールを使用して作業する従来の方法では、ユーザ は一定数のロールに属します。これらは単に「属性」です ユーザーは今、もっと一般的です。ユーザーは、彼らがしている役割に対応する クレームの数を有することができる。

をユーザーのIDは、認証時にチェックされ、その 時点でユーザーが ClaimsIdentityに持っていることをClaimsのセットを割り当てますオブジェクト。これは、データベース からクレームを取得し、必要なものだけを取得することを確認するポイントです。 クレームを確認する人がいる必要がある場合は、 に、このプロセス以外のプロセスが発生している必要があります。確認済みのクレーム のみをClaimsIdentityに追加する必要があります。

今、あなたはときに セキュリティチケットを検証するために CookieAuthenticationMiddlewareに扱うことができるイベントがあるValidatePrincipalと呼ばれるその後の要求にロードされたが、これは何が必要実際にあるかどうかはわから ないんだけどさ。

そして、あなたのその後の応答:

ご回答いただきありがとうございます。これらの主張は、一度dbに入ると、 が有効に請求されたことを理解しています。私は彼らが は、クレームを取り消す方法としてデータベースから削除することができたと思います。

しかし、あなたが示唆するように、最良の方法はこのシステムを外部に持っていることだと思っています。デザイン は、 エンティティの異なるタイプのアカウントをアプリケーションが持つことになり、アカウントは "I が親です"というようにクレームを出すことができます。親は、 これを検証する許可アカウントを求めます。これにより、実際に の認証を受けているアカウント保有者が検証前に実際のドキュメントを参照する必要が生じる場合があります。他の主張は、 変更することができます。たとえば、親の責任を持つ親は、 ビットの検証が必要ですが、現実世界ではその親の責任 を失う可能性があるため、請求を取り消すための施設は である必要があります。

だから、私はデザインが優れた記事次 承認属性と主張システムを使用することであるべきだと思うが、システムを主張 を供給し、検証し、取り消すことができます 別々のシステムを持っています。

+1

ありがとうございました。私はちょうどあなたのブログのあなたの応答を参照して、ここに答えを掲示していた。だから私はちょうど追加します: アンドリューロックからの偉大な応答:[アンドリューロック](https://andrewlock.net)。 私は、クレームシステムに、それが意図していないことをするようにプッシュしようとしていました。したがって、解決策はクレームシステムの外に書いて、検証されたクレームのみを含んでいます。 [ASP.NETコアでの承認の概要](https://andrewlock.net/introduction-to-authorisation-in-asp-net-core/)の記事およびコメントを参照してください。 –

関連する問題