5

を使用してTomcatにWebサービスをデプロイしましApache CXFた。を使用してそのWebサービスを保護するにはどうすればよいOAuth 2.0ですか?

以下のURLを確認しましたが、適切な解決策が見つかりませんでした。oAuth 2.0簡単なWebサービスを実装する方法に関する実用的な例またはチュートリアル?

元のチュートリアルリンク:

4

2 に答える 2

1

私は最近同じ問題に直面しました。かなりの量の調査の後、これは非常に複雑であることがわかりました (これは私だけに限定される可能性があります)。

次の方法で、必要な「承認ヘッダー」を 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 とキーまたはユーザー名とパスワードの組み合わせを使用してください。


以下も参照してください。

于 2013-12-11T13:01:09.127 に答える
1

ここに短い紹介を追加しました: https://cwiki.apache.org/confluence/display/CXF20DOC/JAX-RS+OAuth2#JAX-RSOAuth2-OAuth2tokensandSOAPendpoints

基本的に、Authorization ヘッダーを介して渡されるベアラー トークンをそのまま使用し、WS-Security バイナリ トークンを処理するように簡単にカスタマイズできます。

于 2014-04-11T14:19:38.087 に答える