を使用してTomcatにWebサービスをデプロイしましApache CXF
た。を使用してそのWebサービスを保護するにはどうすればよいOAuth 2.0
ですか?
以下のURLを確認しましたが、適切な解決策が見つかりませんでした。oAuth 2.0
簡単なWebサービスを実装する方法に関する実用的な例またはチュートリアル?
元のチュートリアルリンク:
を使用してTomcatにWebサービスをデプロイしましApache CXF
た。を使用してそのWebサービスを保護するにはどうすればよいOAuth 2.0
ですか?
以下のURLを確認しましたが、適切な解決策が見つかりませんでした。oAuth 2.0
簡単なWebサービスを実装する方法に関する実用的な例またはチュートリアル?
元のチュートリアルリンク:
私は最近同じ問題に直面しました。かなりの量の調査の後、これは非常に複雑であることがわかりました (これは私だけに限定される可能性があります)。
次の方法で、必要な「承認ヘッダー」を 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 が、元の資格情報セット (プロトコルの目標) を使用してサードパーティ アプリケーションにアクセスするのに非常に役立つことを発見しました。ただし、これを行う必要がない限り、(やはり IMO) 完全な oAuth を実装する必要はありません。API の保護だけを考えている場合は、SSL とキーまたはユーザー名とパスワードの組み合わせを使用してください。
ここに短い紹介を追加しました: https://cwiki.apache.org/confluence/display/CXF20DOC/JAX-RS+OAuth2#JAX-RSOAuth2-OAuth2tokensandSOAPendpoints
基本的に、Authorization ヘッダーを介して渡されるベアラー トークンをそのまま使用し、WS-Security バイナリ トークンを処理するように簡単にカスタマイズできます。