私は最近、同じ問題に直面しました。まともな量の研究の後、私はこれが非常に複雑であることを発見しました(そして、これは私だけに限られます)。
なお、このようにしてSOAPのWebサービス呼び出しに必要な「認証ヘッダー」を取り付けることができる。
Map<String, Object> req_ctx = ((BindingProvider)port).getRequestContext();
req_ctx.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, WS_URL);
Map<String, List<String>> headers = new HashMap<String, List<String>>();
headers.put("key", Collections.singletonList("yourkey"));
//... all other parameters required.
req_ctx.put(MessageContext.HTTP_REQUEST_HEADERS, headers);
要求は、その後のようなサーバ側で確認することができる。
MessageContext mctx = wsctx.getMessageContext();
//get detail from request headers
Map http_headers = (Map) mctx.get(MessageContext.HTTP_REQUEST_HEADERS);
List userList = (List) http_headers.get("key");
//... get other information required here
これでリクエストを検証できます。
サイドノートで
それは私の調査結果から、注意することがある、のOAuth2は、単にあなたのAPIを確保するために非常に有用ではありません - 単に外利用から保護。
推理
OAuthの1で、あなたはそれらのキーでユーザーを検証するために、認証を使用することができます。あなたは彼らが要求に首尾よく署名したので彼らが認可されていたことを知っていたので、あなたは彼らが情報へのアクセスを許可しました。
oAuth 2では、HTTPSを使用する必要があります。なぜあなたのAPIでアプリケーション認証を使用するだけではないのですか? oAuth 2は、元の証明書セット(プロトコルの目標)を使用して第三者アプリケーションにアクセスするのに非常に便利であることがわかりました。しかし、これを行う必要がなければ、完全なoAuthを実装する必要はありません(再度IMO)。 APIを保護するだけの場合は、SSLとキーまたはユーザー名とパスワードの組み合わせを使用してください。
も参照してください:
WS-Securityのバイナリ・トークンを処理するためにカスタマイズすることができますあなたがJAX-WS(SOAP Webサービス)を書いたタイトルで、リンクがJAX-RS(REST Services)を指している、私はあなたが正しい場所を探していないと思う – jmhostalet