おそらく最良のアイデアだと思います。/api/controller/docId
または、単一の代理キーを使用して ClientId と docId (私の好み) を表します。
クライアントが他のクライアント リソースを表示できるようにする必要がない限り、私はそれを URI スキームから非表示にします。最悪の場合、クライアントを認証し、クライアントが誰であるかを知っているので、せいぜい情報漏洩と見なされる可能性があります。これはオーバーヘッドでもあります。つまり、URL のクライアント ID がリクエストのユーザー名とパスワードにマップされていることを確認する必要があるため、とにかく各リクエストでクライアント ID を取得する必要があります。
Sales Force などの他のマルチテナント環境がどのように機能するかを見ると、セキュリティ メカニズムを介してクライアントを推測する必要があるか、幸運にもすべてのオブジェクト/リソースに一意の ID を持っていることがわかります。
私が見たアプローチは、/api/{clientId}/controller/docId. マルチテナント環境では、すべてのリソースはおそらく/定義上、そのクライアントに固有です。
このアプローチの理由として、顧客ごとに一意の URL を使用するとキャッシングが容易になるということがあります... /api/{clientId}/controller/docId または /api/controller/{clientId}/docId
基本認証に関する簡単な注意事項
あなたのアプローチに問題はありませんが、考慮してください...パスワードとユーザー名を検証しながらクライアントIDを取得し、それをIPrincipleのクレームとして追加できます。少なくとも、それを見つけるためにさらにデータベースを検索することなく、コードで利用できます(そのリクエストの有効期間内)。
さらに一歩進んで...実際にトークンに含まれるクライアントIDをクレームとしてトークンが発行される(正しいユーザー名とパスワードに従って)2段階認証メカニズムを検討してください。このように、トークンを使用した後続のリクエストは、情報を認証して取得するためにリクエストごとにデータベースをコールバックする必要がないことを意味します。OAuthベアラートークンhttp://self-issued.info/docs/draft-ietf-oauth-v2-bearer.html(必ず署名してください)または他のアプローチのいくつかを見てください...