タグ付けされた質問 「authorization」

2
役割ベースのアクセス許可ベースのアクセス制御
私は、アクセス制御(認可)に関して、ロールとパーミッションの固有のトレードオフを理解しようとしています。 与えられたものから始めましょう:私たちのシステムでは、パーミッションはきめ細かいアクセス単位です(「リソースXの編集」、「ダッシュボードページへのアクセス」など)。役割は 1+権限のコレクションになります。ユーザーは 1+役割を持つことができます。これらの関係(ユーザー、ロール、権限)はすべてデータベースに保存され、必要に応じてその場で変更できます。 私の懸念: (1)アクセス制御のためにロールをチェックすることの「悪い」ところは何ですか?代わりにアクセス許可を確認することでどのような利点が得られますか?言い換えると、これらの2つのスニペットの違いは次のとおりです。 if(SecurityUtils.hasRole(user)) { // Grant them access to a feature } // vs. if(SecurityUtils.hasPermission(user)) { // Grant them access to a feature } そして: (2)このシナリオでは、ロールはどのような有用な価値を提供しますか?1つ以上のアクセス許可をユーザーに直接割り当てることはできませんか?ロールはどのような抽象化の具体的な価値を提供しますか(特定の例を挙げられますか)?

1
SOA /マイクロサービス:サービス間通信で認証を処理する方法
前景 モノリシックプラットフォームから、よりサービス指向のアーキテクチャに移行しています。非常に基本的なDDDの原則を適用し、さまざまな境界のあるコンテキストにドメインを分割しています。各ドメインは配布され、Web API(REST)を介してサービスを公開します。 ビジネスの性質上、予約、サービス、顧客、製品などのサービスを提供しています。 また、主な役割が以下のことを行うIdentity Server(Thinktecture Identity Server 3ベース)をセットアップしました 認証の集中化(トークンを発行する資格情報を指定) 次のようなトークンにクレームを追加します:クライアントのスコープ(クライアントごとに要求を行うアプリケーションを意味する)、顧客識別子(顧客ごとにアプリケーションを使用する人を意味する) また、サービスへの外部アクセスを集中化するAPI Gatewayの役割も導入しました。API Gatewayは、次のような内部ドメインの深い知識を必要としない機能を提供します。 リバースプロキシ:着信要求を適切な内部サービスにルーティングします バージョン管理:API Gatewayのバージョンは、内部サービスの異なるバージョンにマップされます 認証:クライアント要求には、Identity Serverによって発行されたトークンが含まれ、API Gatewayはトークンを検証します(ユーザーが本人であることを確認してください) 調整:クライアントごとの要求数を制限する 認可 認可に関係するものは、これはAPI Gatewayではなく、内部サービス自体で管理されます。現在、主に2種類の承認を行っています。 クライアントスコープに基づく承認。例:クライアント(APIを使用する外部アプリケーション)には、予約サービスAPIエンドポイントにアクセスするためのスコープ「bookings」が必要です 顧客に基づいた承認。例:顧客(アプリケーションを使用する実在の人物)が予約の参加者である場合のみ、予約サービスからエンドポイントGET / bookingsにアクセスできます。 内部サービスで認証を処理できるようにするために、API Gatewayは、クライアント(要求を行うアプリケーション)と顧客としての情報の両方を含むトークン(内部サービスに要求をルーティングするとき)を転送するだけです人がクライアントアプリケーションにログインしている場合)。 問題の説明 これまでのところ、サービス間通信(一部のサービスは他のサービスと通信してデータを取得できます)を導入するまではこれで十分です。 質問 サービス間通信の認可にどのようにアプローチすればよいですか? 考慮されるオプション さまざまなオプションについて説明するには、次のサンプルシナリオを使用します。 予約フローを構築するために、APIにアクセスするExternalAppと呼ばれる外部アプリケーションがあります(ExternalApp はクライアントとして見ることができます) ExternalAppはBookingsサービスにアクセスする必要があるため、ExternalAppにスコープ「bookings」を付与します 内部的に(これはExternalAppに対して完全に透過的なものです)、予約サービスはサービスサービスにアクセスして、フライト、保険、レンタカーなどの予約のデフォルトサービスを取得します この問題を内部で議論する際、いくつかのオプションが表示されましたが、どのオプションが最適かはわかりません。 BookingsがServicesと通信する場合、API Gatewayから受信した元のトークンを単純に転送する必要があります(クライアントがExternalAppであることを示します) 意味:付与されるべきではないExternalAppにスコープを付与する必要がある場合があります。例:ExternalAppにはスコープ「bookings」と「services」の両方が必要な場合がありますが、「bookings」スコープのみで十分です。 BookingsがServicesと通信する場合、クライアントが(ExternalAppの代わりに)Bookingsになったことを示すトークンを転送し、Bookingsが元のクライアントExternalAppになりすましていることを示すクレームを追加します また、元のクライアントがExternalAppであるという情報を含めることにより、サービスサービスは元の呼び出し元に応じて一部のサービスを除外するなどのロジックも実行できます(たとえば、内部アプリの場合はすべての戦いを返し、外部アプリの場合は一部のみ) サービスは互いに通信すべきではありません(そのため、この質問に直面するべきではありません) ご意見をお寄せいただきありがとうございます。

2
ユーザークレームをJWTトークンに保存する必要がありますか?
HTTPヘッダーでJWTトークンを使用して、リソースサーバーへのリクエストを認証しています。リソースサーバーと認証サーバーは、Azureの2つの独立したワーカーロールです。 トークンにクレームを保存するか、他の方法で要求/応答に添付するかについて、思いを固めることはできません。クレームリストは、サーバー上のデータへのアクセスだけでなく、クライアント側のUI要素のレンダリングにも影響します。このため、サーバーで受信したクレームが本物であり、リクエストが処理される前に検証されていることを確認したいと思います。 クレームの例:CanEditProductList、CanEditShopDescription、CanReadUserDetails。 JWTトークンを使用したい理由は次のとおりです。 クレームのクライアント側編集に対するより良い保護(クレームリストのハッキング)。 リクエストごとにクレームを調べる必要はありません。 JWTトークンを使用したくない理由: 次に、認証サーバーはアプリ中心のクレームリストを知る必要があります。 トークンは、ハックエントリの単一ポイントになります。 JWTトークンはアプリレベルのデータ用ではないことをいくつか読みました。 どちらにも欠点があるように思えますが、これらの主張をトークンに含めることに傾倒しており、これを以前に扱った人によって実行したいだけです。 注:すべてのAPIリクエストにHTTPSを使用するため、トークンは「十分」に安全であると思われます。私はAngularJS、C#、Web API 2およびMVC5を使用しています。

1
APIキーを配置する場所:カスタムHTTPヘッダーとカスタムスキームを使用したAuthorizationヘッダー
APIキーを介した承認/認証を使用してREST APIを設計しています。 最適な場所を見つけようとしましたが、次のようなカスタムHTTPヘッダーの使用を多くの人が提案していることがわかりましたProjectName-Api-Key。 ProjectName-Api-Key: abcde ただしAuthorization、カスタムスキームでヘッダーを使用することも可能です。 Authorization: ApiKey abcde 一方、カスタム認証スキームは、一部のクライアントでは予期せずサポートされず、カスタムコードにつながる可能性があるという考慮事項を見つけました。したがって、クライアントには期待がないため、カスタムヘッダーを使用する方がよいでしょう。 どの方法でAPIキーを送信しますか?

2
DDDの実装:ユーザーと権限
私は、ドメイン駆動設計の原則を把握しようとする小さなアプリケーションに取り組んでいます。成功した場合、これは大規模プロジェクトのパイロットになる可能性があります。「Implementing Domain-Driven Design」(Vaughn Vernon著)を読み、同様のシンプルなディスカッションフォーラムを実装しようとしています。また、githubでIDDDサンプルをチェックアウトしました。私は自分のケースにアイデンティティとアクセスを採用するのに苦労しています。背景情報をいくつかご紹介します。 私は(願わくば)ユーザーとアクセス許可のロジックを分離する背後にある理由を理解しています。それはサポートドメインであり、異なる境界コンテキストです。 コアドメインには、ユーザーはなく、作成者、モデレーターのみが存在します。これらは、サービスを使用してIDおよびアクセスコンテキストにアクセスし、受信したユーザーオブジェクトをモデレーターに変換することによって作成されます。 ドメイン操作は、関連する役割をパラメーターとして呼び出します。例: ModeratePost( ..., moderator); ドメインオブジェクトのメソッドは、指定されたモデレーターインスタンスがnullでないかどうかを確認します(IDおよびアクセスコンテキストから要求されたユーザーがモデレーターロールを持っていない場合、モデレーターインスタンスはnullになります)。 ある場合には、投稿を変更する前に追加のチェックを行います: if (forum.IsModeratedby(moderator)) 私の質問は: 後者の場合、セキュリティの懸念がコアドメインに再び溶け込んでいないのですか?以前は、本は「誰が主題を投稿できるか、またはどのような条件で許可されていますか。フォーラムは著者が今それをしていることを知る必要があります」と述べていました。 本のロールベースの実装は非常に簡単です。モデレーターがコアドメインである場合、必要なときに現在のユーザーIDをモデレーターインスタンスまたはオーサーに変換しようとします。サービスは適切なインスタンスで応答するか、ユーザーに必要なロールがない場合はnullで応答します。ただし、これをより複雑なセキュリティモデルにどのように適合させることができるかわかりません。私がパイロットをしている現在のプロジェクトには、グループ、ACLなどのかなり複雑なモデルがあります。 「投稿はその所有者または編集者のみが編集する必要があります」のようにあまり複雑ではないルールでさえ、このアプローチは破綻しているように見えます。 IdentityOrAccessコンテキストにOwnerOrEditorインスタンスを要求することは適切ではないと感じ、コアドメインではますますセキュリティ関連のクラスになります。さらに、userIdだけでなく、保護されたリソースの識別子(投稿、フォーラムなどのID)をセキュリティコンテキストに渡す必要があります。 ) コアドメインへのアクセス許可を引き出し、ドメインオブジェクトのメソッドまたはサービスでそれらをチェックすることで、最終的には、セキュリティに関する懸念をドメインに混在させることになります。 セキュリティとアクセス許可がコアドメイン自体でない限り、これらのアクセス許可関連のものはコアドメインの一部であってはならないことをどこかで読みました(そしてそれに同意する傾向があります)。上記のような単純なルールは、セキュリティをコアドメインの一部にすることを正当化しますか?

5
マイクロサービスおよび消費者向けの承認および認証システム
会社のシステムをマイクロサービスベースのシステムにリファクタリングする予定です。このマイクロサービスは、社内の社内アプリケーションと、必要に応じてサードパーティパートナーによって使用されます。予約用、製品用など ロールとスコープをどのように処理するかは不明です。管理者、エージェント、エンドユーザーなどの3つの基本的なユーザーロールを作成し、必要に応じてコンシューマーアプリがスコープを微調整できるようにするという考え方です。 管理者は、デフォルトで(会社の)すべてのリソースを作成、更新、読み取り、削除できます。 エージェントは、会社のデータを作成、更新、および読み取ることができます。 エンドユーザーはデータを作成、更新、削除、および読み取ることができますが、エージェントまたは管理者と同じエンドポイントにアクセスすることはできません。また、エージェントや管理者と同じレベルではなく、データを作成または変更することもできます。たとえば、エンドユーザーはアカウント情報を更新または読み取ることができます。これは、エージェントができるようになりますが、管理者ノートを表示または更新することはできません。 デフォルトでは、エージェントは会社の各リソースを作成、読み取り、更新でき、それはトークン/セッションに要求できる最大スコープですが、クライアント(APIコンシューマー)アプリケーションの開発者は、エージェントの1人が特定のリソースのみを読み取り、作成します。 内部セキュリティでこれを処理し、データベースにデータを書き込むようにするか、クライアントにスコープを小さくしてトークンを要求することで内部的に処理させ、どのエージェントがデータベースにどのスコープを持つかを書き込むようにすることをお勧めします?この方法では、トークンスコープのみを追跡する必要があります。 この欠点は、チームが内部アプリケーションで微調整されたアクセスメカニズムを作成する必要があることです。 この考え方では、マイクロサービスとその承認システムはクライアントのニーズに煩わされるべきではありません。なぜなら、それらは消費者であり、システムの一部ではないからです。 この委任は良いアプローチですか?

2
役割ベースのアクセス制御を設計する方法は?
役割ベースのアクセス制御モデルに従って、システムでユーザーができることまたはできないことを制限しようとしています。 これまでのところ、次のエンティティがあります。 users-システムを使用する人。ここにユーザー名とパスワードがあります。 roles-ユーザーが持つことができる役割のコレクション。マネージャー、管理者などのリソースのような もの-ユーザーが操作できるもの。契約、ユーザー、契約草案などの 操作のように -ユーザーがリソースでできること。作成、読み取り、更新、削除など。 さて、このような関係があるダイアグラムでは、ここで疑問が浮上します。 操作(0 .. *)は リソース(0 .. *)に対して実行され、permissionsという名前のテーブルを生成し、操作とリソースを保存します。 許可テーブルは次のようになります(1行): ID: 1、操作: create、リソース: contract。 どの意味許可する作成の契約を。 一部のリソースにはすべての種類の操作が含まれていない可能性があると感じているため、このようにしました。たとえば、契約を登録する場合、ユーザーはファイルをアップロードできますが、この操作はプロバイダーの登録には使用できません。 そのため、管理者がロールにアクセス許可を付与するときに、システムに登録されたすべての単一操作のリソースのリストはありません。 各リソースには、自分で実行できる独自の操作のコレクションがあると思います。 何かが理解できない場合は明確にすることができます。 これは、rbacを実装する正しい方法ですか? 編集 つまり、操作とリソースを持つアクセス許可テーブルを使用することで、リソースを操作に関連付けるために2つの余分なテーブルがあります。また、私はちょうど行っている可能性のリソースが持っている権限の許可テーブルが権限を格納します。 しかし、その場合、管理者がリソースを割り当てたときに、一部のリソースには存在しないアクセス許可が表示されていた可能性があります。 だから私は、データベース設計の観点から、1つの列操作と別のリソースを持つこのテーブル権限が正しいかどうか知りたいですか?この状態が続くと問題が発生しますか?

8
安全でないパスワードに対するユーザーの処罰[終了]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 安全でないパスワードを選択するユーザーの権利を制限することを考えています(長さによって決定されるパスワードの安全性、使用される文字の種類(大文字/小文字、数字、記号など)、および使用できるかどうか)レインボーテーブルにあります)、侵害された場合にアカウントが受ける損害を制限します。 このアイデアのアプリケーションはまだありませんが、フォーラムなどを書いています:1234をパスワードとして使用するユーザーは、投稿する前にキャプチャを入力するか、厳格なスパム対策の対象となる場合がありますコンテンツを拒否するタイムアウトまたはベイジアンフィルターとして。このフォーラムが非常に階層的であり、モデレーターまたは何らかの手段による「昇格」を許可する場合、これは、それらが特権を獲得するのを阻止するか、特権を持っていることを伝えますが、より安全なものに変更せずにそれらを行使させませんパスワード。 もちろん、これはセキュリティの唯一の尺度となることはできませんが、それ以外の場合は適切なセキュリティプラクティスの次にうまくいくかもしれません。 どう思いますか?これは無理をして、より重要なセキュリティ慣行からフォーカスを奪い取っているのでしょうか、それともリスクを制限し、ユーザーに安全なパスワードの使用を促す良い方法ですか?

2
マイクロサービスを使用したユーザー認証
マイクロサービスが独自の承認を処理する必要がありますか、それともマイクロサービスのすべてまたはサブセット(同じビジネスドメイン内)で共有される個別の承認サービスを使用する方が良いと思いますか? 私にとって後者は、変更の適用、ポリシーの実施を容易にするため、より理にかなっています。DRYなどです。ただし、あらゆる種類のサービスがルールを1か所にダンプすることで簡単に手に負えなくなる可能性があり、ネットワークのオーバーヘッドも心配します。 何かご意見は?

1
jwtの「aud」と「iss」の違い
より堅牢な認証サービスを実装したいのですが、やりたいことのjwt大部分を占めています。コードの記述方法は理解していますが、予約済みissとaudクレームの違いを理解するのに少し問題があります。1つはトークンを発行しているサーバーを定義し、1つは使用を目的としたアプリケーションを指していることを理解しています。しかし、私の聴衆と発行者が同じものであることを私が理解している方法は、myserver.com来た人myserver.comが承認され認証されるようにトークンを発行することです。2つのクレームの違いはわかりませんが、1つあることは知っています。 で書かれた良い記事がありましたmsdn すべての予約済みのクレームで、発行者とオーディエンスが完全に異なっていたため、最も混乱しました。

2
クッキー対セッション対jwt
Webアプリケーションの認証/承認について読んでいます。誰かが私の現在の知識を確認/修正できますか? Cookie:初期のバージョンでは、一意のクライアントIDを含むテキストファイルと、クライアントについて必要なその他すべての情報(ロールなど) セッション:一意のクライアントIDのみがファイル(Cookieとも呼ばれます)で送信され、それ以外はすべてサーバーに保存されます JWT:すべてがトークンに保存されます(これは、Cookieとも呼ばれるテキストファイルに保存することもできます) フィードバックをありがとう!

2
自分のアプリケーションでExchange Serverの「RBAC AuthZ」を模倣しています…(同様のものはありますか?)
Exchange 2010には委任モデルがあり、winrmコマンドレットのグループは本質的に役割にグループ化され、役割はユーザーに割り当てられます。 (画像ソース) これは、適切な低レベルのテクノロジ(WCF、SOAPなど)を使用し、クライアント側に追加のソフトウェアを必要とせずに、PowerShellのすべての利点をどのように活用できるかを考慮した、優れた柔軟なモデルです。 (画像ソース) 質問 .NETアプリケーションでExchangeの委任モデルを活用する方法はありますか? このモデルを模倣しようとした人はいますか? 最初から始めなければならない場合、このアプローチを模倣するにはどうすればよいですか?

2
分散システムの認証オプション
私は、互いにシンフォニーで機能する3つのコンポーネントを設計しているところです。 BasicAuthすべての呼び出しでHTTPS を必要とするRESTful Webサービスであり、これが実際に私のシステムのすべての重労働を実行します(作業を行います) エンドユーザーのアクションを上記のWebサービスへのAPI呼び出しに変換するWeb UI。したがって、UIはWSによって「サポートされます」 開発者がローカルでインストールして実行できるコマンドラインインターフェイス(CLI)ツール。コマンドをWSへのAPI呼び出しに変換します(したがって、これもWSによって「サポートされています」)。 私が乗り越えようとしている最初のハードルの1つは、認証と承認に関するものです。 WSがLDAP /ディレクトリサービス(ADまたはおそらくApache DSなど)を認証レルムとして使用しているとしましょう。つまり、API呼び出しがネットワーク経由で(たとえば、あるHTTPS GETリソースの)BasicAuth受信されると、資格情報が要求から抽出され、LDAPサービスに転送されて、これが有効なユーザーであるかどうかが判断されます。認証されている場合、特定のユーザーが HTTPSリクエストで試行していることを実行できるかどうかを判断するために、別の認証レルム(おそらくデータベース)が使用されているとしましょう。ここまでは順調ですね。 CLIツールの場合、ユーザーはコマンドを実行する前に認証を受ける必要があります。したがって、単一のユーザーは常に同じCLIインスタンスを操作するだけなので、このモデルは問題なく機能します。 Webアプリケーション(UI)をWSと統合しようとすると、問題が発生します。なぜなら、多くの人が同時にアプリにログオンする可能性があり、すべて異なるアクセス許可で、許可されている基本的なAPI呼び出しを指示するためです。 私の知る限り、それを見て、それが見えます私はここが、4つのオプションを持っているように: キャッシュされた資格情報:アプリにログインした後、資格情報が何らかの形であり、どこかで(アプリはそれらへのアクセスを持っているように)キャッシュされた、とアプリが認可ポリシー自体の任意の種類を強制しません。ユーザーが内部でAPI呼び出しを生成することをしようとすると、資格情報がキャッシュから検索され、API呼び出しで転送されます。WSが承認されていないと判断した場合、WSはエラーを返します。 サービスレベルアカウント:アプリとWSはどちらも同じ認証/承認レルムを使用しますが、Web UIは、ユーザーがアプリ内で実際に表示および実行できるものに承認を適用するようになりました。基盤となるAPI呼び出しを生成する何かを実行することが許可されている場合、アプリmyapp-admin-userはユーザーに代わって各API呼び出しでサービスアカウントの認証情報(など)を送信します。 OAuthv2:OAuthが何であるか、またはこのシナリオに適用できるかどうかはわかりませんが、どういうわけかここでの解決策になると思います。 トークンサーバー:サービスレベルのアカウントオプションと同様の方法で、CASやKerberos などのトークンサーバーを使用してユーザーを保証します。ここで、ユーザーがアプリに正常にログインすると、トークンサーバーはアプリにセッションUUIDを送り返し、そのUUIDをWSに登録します。アプリがAPI呼び出しを生成するたびに、UUIDをリクエストに付加し、それがWS側で検証されます。 「Cached Credentials」オプションは、セキュリティ分野で優れていて健全なすべてのものの逸脱のように感じられます。資格情報をどこにでもキャッシュするのは間違っていると感じるだけです。 「Token Server」オプションは、SSOタイプのセットアップでは有効のようですが、この特定のケースでは有効ではないため、私には不便に感じられます。また、セッションUUIDの概念と BasicAuth / HTTPSを同時に使用する良い方法はないと思います。 したがって、これは私が何も知らないOAuthv2と、残りの唯一のオプションとして「サービスレベルアカウント(SLA)*」を残します。SLAオプションは問題ないようですが、次のようないくつかの欠点があります。 サービスアカウントには、基本的にWSに対する「神の特権」が必要です。つまり、ユーザーがボタンをクリックしたり、UIで何かを実行したりできるとアプリが判断すると、UIで使用されているサービスアカウントによる無条件のAPI呼び出しに変換されます。これは気分が悪いですよね? 2つの権限セット(アプリの各ユーザーに設定された権限セット、次にアプリがWSに対して使用するサービスアカウントに設定された権限セット)を維持すると、権限が互いに同期しなくなる可能性があります何とかして だから私は本当にここには良い選択肢がないようです。確かに私はこれに遭遇する最初の開発者になることはできませんが、Googleの神々に尋ねることはここではあまり助けになりませんでした。何か案は?

3
トークンによる認証
私はjwt.ioと認証に比較的慣れていないため、次のようにJWT.ioを使用しています。 サーバ側 ユーザーがログインしたら、userid内部に埋め込まれたトークンを生成し、メッセージ本文でユーザーに返します クライアントサイドブラウザー/ JSトークンをlocalStorageに保存し、後続の各リクエストで、トークンをヘッダーに渡します。 Authorization: Basic someEncryptedValue 私も使用しました X-Auth-Token: someEncryptedValue これをクッキーに入れてもいいですか? 次に、サーバー側で、トークンをシークレットに対して検証し、有効期限を確認し、トークンからIDを取得して、リクエストを処理します。 このワークフローはすべて正しいですか?

3
ユーザーがREST APIで自分のリソースを変更/操作することのみが許可されることを承認するための最良のソリューション
バックグラウンド: 現在、REST APIを構築する過程で、ノードw / expressを使用しており、モバイルアプリと最終的には(最新のブラウザーベースの)Webサイトによって消費されます。 私は、ユーザーが自分のリソースを変更することのみが許可されるように、ユーザーの更新/アクション要求を承認する最良の方法を特定しようとしています。アクションは準高頻度で発生するため、懸念事項です。 注:この使用例では、エンティティーの所有権を譲渡することはできません。 可能なソリューション: 解決策:reddisなどのサーバーセッションで各ユーザーのリソースのリストを保存および維持します。 懸念事項:サーバー側セッションの永続化には、複数のサーバーに合わせて拡張する独自の複雑さのセットがあります。これもRESTに違反しています。詳細については、do-sessions-really-violate-restfulnessをご覧ください。 解決策: ユーザーの更新/アクションクエリの前に読み取りクエリを実行します。IEは私にこのユーザーのアイテムを提供し、リストにある場合は更新を続行します。 懸念事項: ユーザーがリソースに代わって操作するたびに追加の読み取りのオーバーヘッド。 解決策: ユーザーIDをdbレイヤーに渡し、それを更新条件付きの一部にします。または、ファンシーを取得したい場合は、データバックエンドに応じて、そのリソースに対してPostgresの行レベルのセキュリティなどを使用します。 懸念事項: リソースがリクエストしているユーザーのものかどうかを確認するには、リクエストのライフサイクルの少し遅いようです。エラーは、データバックエンドからずっと上にスローされる必要があります。同じように、認証とロールベースの承認はリクエストのライフサイクルの最初に行われることが多いので、少しずれているかもしれません。実装は、データバックエンドにも依存します。また、データバックエンドにビジネスロジックを示します。 解決策: クライアント側で一種のセッションに署名しました。JWTまたは暗号化/署名されたCookieを使用します。基本的に、ユーザーのリソースIDのリストを含む信頼されたセッションを維持します。 懸念事項: クライアント側セッションのサイズ。不要な場合でも、すべてのリクエストで送信されるという事実。複数のアクティブなセッション/クライアントの可能性を導入すると、メンテナンスが非常に複雑になります。リソースが別のクライアントに追加されたときに、クライアント側の状態をどのように更新しますか。 解決策: リソースがフェッチされるときに、署名された更新トークン(JWT)またはURLをリソースとともにクライアントに渡します。リソースが更新/アクションされたときに期待します。署名されたトークンには、ユーザーIDとリソースIDが含まれ、これらに対して簡単に確認できます。 懸念事項: リソースの所有権を譲渡できる場合は複雑になりますが、私の場合は問題ありません。更新前の読み取りよりも複雑になります。ちょっと変? 最終的な考え: 私は最後の解決策に傾いていますが、それが頻繁に発生することはないので、何か不足しているのではないかと思いますか?あるいは、私が知らないデザインパターンの一部かもしれません。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.