web-dev-qa-db-ja.com

REST API(ドメイン駆動設計)でのユーザー認証

REST APIをDDDプロジェクトのプレゼンテーション層として使用しています。API呼び出しを保護するために、トークンベースのセキュリティを使用しています。

Web APIのセキュリティ-アクションフィルターを使用したWeb APIの基本認証とトークンベースのカスタム認証

APIユーザー管理コンテキストが別のAPIまたはBC(設計に応じて)によって永続化されている場合、ユーザーをチェックするためにBCが実際に外部リソース(サードパーティAPIまたはDDD内の他のBC)にアクセスすると、DDDを中断すると見なされますか資格情報?

4
Dario Granich

Alexander Langerの発言とは別に、正当な理由があるだけでなく、実際のセキュリティポリシーがさらに前進し、ドメインロジックにいかなる種類の資格情報や一時的なトークンも保持していません。

実際的に言えば(DDDや正確なケースをよく知らないことをお詫びします):

  • ドメインロジック(BC、WebServiceなど)が実際に資格情報を保持する必要はほとんどありません
    • ほとんどのタスクでは、ロジックは上記のセキュリティレイヤー(クライアントサーバートランスポートセキュリティに基づいて相互に信頼するビットスマートリバースプロキシなど)に依存して、厄介なセキュリティのほとんどを整理できます。
    • ビジネスパーツを消費者に公開しないで、セキュリティで保護されたパーツの後ろに置きます
  • セキュリティレイヤーが正しいユーザー識別子と特定のドメイン(BC)に関連する一連のアクセス許可識別子を与えたという事実だけにロジックを依存させましょう
    • セキュリティレイヤー(およびセキュリティエキスパート)がセキュリティ作業を適切に行うことを信頼する
    • それが責任を負わないものでビジネスコードを信頼しないでください
    • プログラマーからの最悪のセキュリティ欠陥を予期する
  • ドメインロジックが資格情報(トークンの形式であっても)を知るのは「情報が多すぎる」ため、ユーザーを「いたるところに」偽装するビジネスコード機能は必要ないと思います。
    • 最小限の情報を目指してください。タスクを実行するために必要なものは何ですか。
    • タスクはビジネス/ドメインです。それはユーザーと彼のものに関するものです。セキュリティ層のドメインになるのは、彼の資格情報ではありません。

この種のセキュリティ決定の潜在的な影響を想像するために、トークン/クレデンシャル/ユーザーIDに格納される「情報」は、データのバイナリコンテンツだけでなく、今日のデータを使用してこのデータから到達可能なすべてのものであるという事実を考慮してください。または将来の可能性(ハッシュのクラッキング、攻撃者によるトークンを使用したシステムの別の部分のクロールなど)

3
LubosTomsa