2016-07-28 9 views
2

HTTPメソッドのセマンティクスにしたがってREST APIを作成しようとしていますが、DELETEメソッドが使えなくなってしまいました。HTTP DELETEリクエストで認証の詳細を渡すには?

私の場合、サービスはユーザーを認証するゲートウェイの背後にあります。このサービスはSSOトークンを使用し、ユーザーを認証して詳細を取得します。この時点から、パス変数として削除したいリソースのIDを使用するサービスを呼び出そうとしていますが、検証のためにユーザーのIDを渡す方法がわかりません。

私は、DELETEメソッドにボディを追加する問題について、多くの記事を読んできました。私はまた、ユーザーを識別するためのカスタムヘッダーを追加するのが正しい方法ではないと考えています。私が持っているオプションのうち、唯一の2つは賢明だと思う:

  1. ユーザーIDを本体としてPOST要求を出します。私は基本的に特定されたリソースでPOSTを使用しているため、意味的に私に間違って聞こえるので、この1つが気に入らない。
  2. ユーザーIDがパス変数になるように要求を行います。それはこのようになります。 path/to/service/resourceId/{resourceId}/userId/{userId}となります。この問題の私の問題は、POSTリクエストとPUTリクエストでは、userIdがボディの一部であるということです。 APIは一貫して見えませんでしたが、ユーザーIDもURLの一部であるように、他の2つを変更することができると思います。

答えて

2

ユーザートークンを渡すためにHTTPヘッダーパラメーターを使用する必要があります。ゲートウェイがどこにある

@DELETE 
@Path("/{id}") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
public Info deleteInfo(
     @HeaderParam("Authorization") String token, 
     @PathParam("id") Long id){ 
} 
+0

ユーザーが既に承認されている場合でもこれは適用されますか?私の場合、userIdが必要な理由は、データを格納するエンドアプリケーションと同じように、リソースが実際に彼のものであることを検証することです。だから私は、この場合は認可ではないと思う。リソース1はユーザ1に属し、ユーザ2には属していないという検証だけである。それは、すべてのアプリとメソッドの検証のためにクライアントの詳細を渡すアプローチだろうか?彼のIDのようなクライアント情報は、アプリケーションからすべてのリソースを取得するためにGETリクエストを発行する場合のような有効なパス変数ではありませんか? (パス/ to/app/user/{userId}のように) – Kilian

+0

認証=ログイン+パスワード(あなたがいる人)権限=権限(許可されているもの) - http://stackoverflow.com/questions/6556522/authentication -versus-authorization。私のアプリでは、ユーザー名とパスワードを含むJSON本体でPOSTログインを使用します。後でヘッダーパラメーターで使用されるトークンを返します。 – Justas

+0

あなたが正しいです、これはユーザーの承認です。この場合、私はそれに固執するでしょう。ありがとう – Kilian

0

HTTP認証、多分?それが何のためのものなのですか? RFC 7235を参照してください。

+0

認証は、ゲートウェイレベルで行われ、通信がDMZから行われているが、それは私が、私は非常に精通していないよ正直にuserId.toを必要とする内部のアプリに、あります内部の会社のネットワークの内部ではセキュリティの制約がありますが、呼び出されるすべてのマイクロサービスでの認証はあまり効果がありません。 – Kilian

関連する問題