/users/{id}
をRESTfulサービスのリソースURLとしましょう。RESTfulサービスでのリソースレベルの承認
基本認証が有効になっており、認証されたユーザーのみがURLにアクセスできます。
例のシナリオ:両方が認証されているので
User_1
& User_2
それらの両方は、
/users/1
/users/2
をへのアクセスを有するものは、ユーザーID 1 をユーザーに認証され
しかし、User_1
には/users/1
にアクセスし、/users/2
や他のユーザーIDにアクセスする必要はありません。
質問: RESTfulサービスでリソースレベルの認可を行う方法はありますか。
注:Jax-RS(Apache CXF実装あり)を使用してRESTfulを実装しています。Jax-RSで説明できる場合に役立ちます。
-Barath
編集:ドナルが述べたように
、私はむしろレベルの認可リソース役割ベースの許可を捜しているわけではありません。
たとえば、/ users/{id}/photos/{photoId}を別のリソースURLとすることができます。 User_1には、彼に属する写真のみにアクセス権を与える必要があります。 userIには、/ user// users/1/photos/2がリクエストされたときに、http_404エラーコードhttp_404を指定する必要があります。[User_1は認証されたユーザであるため、/ users// photos/2、私たちは私がである、などの各クエリで許可を決定する一意のIDを含めると考えることができます
唯一の解決策は、
代わりのSELECT * FROM PHOTO_TBL WHERE PHOTO_ID=2;
]リソースのURLを介してより認証パラメータに基づいてユーザIDを特定する必要があります
使用SELECT * FROM PHOTO_TBL, USER_TBL WHERE PHOTO_ID=2 AND USER_ID=1 AND USER_ID=PHOTO_ID;
は、特定のユーザーに属するデータを配信しています。 [すべての要求がSTATELESS要求であるため、認証(この場合userId)を決定するために使用されるクライアント側の一意のIDの変更を防止するメカニズムが必要です]
警告:各クエリセキュリティ上の懸念を理解し、余分な参加を含めるには十分に知的でなければなりません。これはセキュリティロジックをすべてのビジネス機能に結びつける悪い設計です。
私はまだSpringのセキュリティと、このユースケースでどのように使用できるのかを見ていません。
これはタグに記載されているように、これは認証を通過した認証の問題です。これは、アプリケーションにロールインするか、URLのユーザーIDと認証ヘッダーを比較する中間プロキシとして実装できます。 – Szocske
@Szocske:これは、アプリに入れる価値がある場所です。しかし、あなたはSpring AOP(とSpring Security、自然に)を使って簡単にすることができます。やや難しいのは、実際にはロールベースのアクセス制御ではなく、SpringSecのRBACサポートが関係ないということです。 (悲しいかな、これは最高のチュートリアル資料です...) –
これで、とにかくusersテーブルへの参加が必要な画像IDの編集が表示されます。しかし、この場合、URLにユーザIDが必要なことはほとんどありません:-) – Szocske