0

Springを使用してRESTfulWebサービスを実装しようとしています。私は、RESTサービスに適用されるリンクで機能するようにSpringSecurityを設定しました。AndroidアプリケーションからこのWebサービスを呼び出します。私が今やったことは、基本認証を使用してそれに接続することです。私が苦労しているのは、これが本当にどれほど安全かについてのまともな情報を見つけることです。少なくともSSLを介してこれらの呼び出しを行う必要があると思いますか?

RESTクライアントを呼び出すAndroidクライアント上の私のコード

  public MyClass callRest() {
    final String url = "http://10.0.2.2:8080/myservice/rest/getSomething";

    HttpAuthentication authHeader = new HttpBasicAuthentication(username,
            password);
    HttpHeaders requestHeaders = new HttpHeaders();
    requestHeaders.setAuthorization(authHeader);
    requestHeaders.setAccept(Collections
            .singletonList(MediaType.APPLICATION_JSON));

    RestTemplate restTemplate = new RestTemplate();
    restTemplate.getMessageConverters().add(
            new MappingJacksonHttpMessageConverter());
    try {
        ResponseEntity<MyClass> response = restTemplate.exchange(url,
                HttpMethod.GET, new HttpEntity<Object>(requestHeaders),
                MyClass.class);
        return response.getBody();
    } catch (HttpClientErrorException e) {
        return new MyClass();
    }

}

だから私が今私のSpringSecurity設定に入れたもの:

<http auto-config='true'>
    <intercept-url pattern="/rest/**" access="ROLE_USER"
        requires-channel="https" />
</http>

もちろん、httpsが原因で接続が機能しなくなったため、そこからどこに行くのかわかりません。Resttemplateを使用してこれを理解する方法の適切な例を見つけることができないようです。

何か助けはありますか?

4

1 に答える 1

1

HTTP基本認証は、HTTPSを介して使用する場合、ユーザーフィールドとパスワードフィールドが暗号化された接続を介して送信されるため、中間者攻撃に対する脆弱性がはるかに低いため、かなり安全です。ここにいくつかの興味深い点があります:APIの保護:SSLとHTTPの基本認証と署名

私の意見では、ユーザーの機密データ(銀行口座の詳細、クレジットカード番号、電子メールアドレス、パスワードなど)にアクセスできるAPIを作成している場合は、HTTP基本認証がブルートフォース攻撃に成功するため、より安全なアプローチが必要になる場合があります。 (最大再試行などの抑止力を組み込んでいない限り)いつでも利用できます。APIがゲームまたは基本ビジネスデータ用である場合、ハッカーがそれに時間を費やす魅力は少なくなります。

サーバーはHTTPSをサポートしていますか?多くの場合、HTTPS証明書に追加料金を支払う必要がありますか、共有HTTPSドメインのサブドメインを提供する共有を1回使用する必要があります-つまりhttps//your-site.your-hosting-provider.com/。おそらくこれをチェックする必要があります。

更新1:問題はサーバーにあり、プログラムにはないようです。TomcatサーバーでHTTPSを設定する方法については、このブログ投稿を確認してください。SpringアプリケーションからHTTPSを使用する前に、これを行う必要があります。コードを見ると、サーバー以外に問題はないようです。

これも試してみてください。

UPDATE 2アクセスできるようになったら、Androidデバイス(またはデスクトップ/ Webアプリケーションを作成している場合はJavaインストール)の証明書を信頼する必要があります。CA機関ではなく自分で作成したため、信頼できる必要があります。この回答を参照してください:HTTPS経由でHttpClientを使用してすべての証明書を信頼する(すべての証明書を信頼することに関する部分ではありません-これは危険な場合があります)。

于 2013-01-04T09:49:46.230 に答える