Spring AMQP + RabbitMQ 3.3.5 ACCESS_REFUSED-認証メカニズムPLAINを使用してログインが拒否されました


92

例外を下回っています

org.springframework.amqp.AmqpAuthenticationException:com.rabbitmq.client.AuthenticationFailureException:ACCESS_REFUSED-ログインは、認証メカニズムPLAINを使用して拒否されました。詳細については、ブローカーのログファイルを参照してください。

構成:WindowsのRabbitMQ 3.3.5

https://www.rabbitmq.com/access-control.html%APPDATA%\RabbitMQ\rabbit.config に従って、以下の変更を行った設定ファイルについて

[{rabbit, [{loopback_users, []}]}].

また、user / pwdを作成してみました-test / testが機能しないようです。

この投稿の手順を試しました。

その他の構成の詳細は次のとおりです。

TomcatがSpringアプリケーションコンテキストをホストしました:

<!-- Rabbit MQ configuration Start -->
    <!-- Connection Factory -->
    <rabbit:connection-factory id="rabbitConnFactory" virtual-host="/" username="guest" password="guest" port="5672"/>

    <!-- Spring AMQP Template -->
    <rabbit:template id="rabbitTemplate" connection-factory="rabbitConnFactory" routing-key="ecl.down.queue" queue="ecl.down.queue" />

    <!-- Spring AMQP Admin -->
    <rabbit:admin id="admin" connection-factory="rabbitConnFactory"/>

    <rabbit:queue id="ecl.down.queue" name="ecl.down.queue" />

    <rabbit:direct-exchange name="ecl.down.exchange">
        <rabbit:bindings>
            <rabbit:binding key="ecl.down.key" queue="ecl.down.queue"/>
        </rabbit:bindings>
    </rabbit:direct-exchange>

私のコントローラークラス

@Autowired
RmqMessageSender rmqMessageSender;

//Inside a method
rmqMessageSender.submitToECLDown(orderInSession.getOrderNo());

メッセージの送信者:

import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component("messageSender")
public class RmqMessageSender  {

    @Autowired
    AmqpTemplate                rabbitTemplate;

    public void submitToRMQ(String orderId){
        try{
            rabbitTemplate.convertAndSend("Hello World");
        } catch (Exception e){
            LOGGER.error(e.getMessage());
        }
    }       
}

上記の例外ブロックは以下の例外を与えます


org.springframework.amqp.AmqpAuthenticationException:com.rabbitmq.client.AuthenticationFailureException:ACCESS_REFUSED-ログインは、認証メカニズムPLAINを使用して拒否されました。詳細については、ブローカーのログファイルを参照してください。


エラーログ

  =ERROR REPORT==== 7-Nov-2014::18:04:37 ===
closing AMQP connection <0.489.0> (10.1.XX.2XX:52298 -> 10.1.XX.2XX:5672):
    {handshake_error,starting,0,
                     {amqp_error,access_refused,
                                 "PLAIN login refused: user 'guest' can only connect via localhost",
                                 'connection.start_ok'}}

Plsはpom.xmlエントリの下にあります

        <dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit</artifactId>
            <version>1.3.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.integration</groupId>
            <artifactId>spring-integration-amqp</artifactId>
            <version>4.0.4.RELEASE</version>
        </dependency>

ご意見やご提案がございましたらお知らせください


編集した設定が読み込まれていることを確認してください。
pinepain 2014年

zaq178miami、ロードされたことを確認するためにいくつかの手順を実行しました。サービスを再起動し、マシンを再起動し、RabbitMQを再インストールします。
Javaboy、2014年

回答:


104

Artem Bilanがここで説明しことが、このエラーの理由の1つであると確信しています。

Caused by: com.rabbitmq.client.AuthenticationFailureException: 
ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. 
For details see the

しかし、私にとっての解決策は、rabbitMQ管理ページ(http:// localhost:15672 /#/ users)にデフォルトのユーザー名とパスワード(guest / guest)でログインしてから、新しいユーザーを追加し、その新しいユーザーのために仮想ホストからアクセスする権限を有効にし、デフォルトのゲストの代わりに新しいユーザー名とパスワードを使用して、エラーをクリアしました。

ここに画像の説明を入力してください


2
それも私のために働いていません。guest:guestとの接続は問題ありません。newUser:newPwdとの接続でこのエラーが発生しています。なぜだかわからない!
Shashank 2017年

1
同じ問題がありました。この提案に従って、それはこの問題を解決しました。
クリスチャンデルビアンコ

43

@ cpu-100の回答を完了するには、

Webインターフェースを有効化/使用したくない場合は、以下のようなコマンドラインを使用して新しい認証情報を作成し、それをコードで使用してRabbitMQに接続できます。

$ rabbitmqctl add_user YOUR_USERNAME YOUR_PASSWORD
$ rabbitmqctl set_user_tags YOUR_USERNAME administrator
$ rabbitmqctl set_permissions -p / YOUR_USERNAME ".*" ".*" ".*"

1
ありがとう、私はRabbitMQの経験がありません。これは、AWS AMIからサーバーへのリモート接続を取得して、さらに調査する必要があるかどうかを実験するための迅速な解決策でした。
jbm 2017年

36

ユーザー 'guest'はlocalhost経由でのみ接続できます

RabbitMQ 3.3.x以降はそうです。したがって、クライアントライブラリを同じバージョンにアップグレードするか、Spring AMQPを最新バージョンにアップグレードする必要があります(依存関係管理システムを使用している場合)。

127.0.0.1hostオプションのデフォルト値として使用された以前のバージョンのクライアントConnectionFactory


こんにちはArtemです。jarのバージョンのpom.xmlエントリを追加しました。理想的には、ゲストのユーザー名とパスワードを使用しないようにします。上記のシナリオで、すぐに使えるユースケース/概念実証に使用できる指針があるかどうか教えてください。
Javaboy 2014年

申し訳ありませんが、ここにはユースケースの質問が表示されないため、「上記のシナリオでのprod readyのユースケース/概念実証」について何を意味するのかは明確ではありません。RabbitMQブローカーでユーザーを自由に作成してください。
Artem Bilan 2014年

簡単な解決策は、指定することですlocalhost。そうのようにConnectionFactory("localhost")
ブレントBradburn

azure UbuntuVMの場合、azureが割り当てられたip guest/guestアカウントでグローバルに機能します!:(
Dev Anand Sadasivam 2018年

13

エラー

ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.

アプリケーションがRabbitMQへの接続に使用しようとしている資格情報が正しくないか欠落している場合に発生する可能性があります。

これは、ASP.NETアプリケーションのweb.configファイルに保存されているRabbitMQ資格情報""に、実際のパスワード文字列値ではなく、パスワードの値があったときに発生しました。


1
はい-タイプミスに注意してください。:-)
Sundar Annamalai



2

新しいソリューション:

ノードモジュールは処理できません :パスワードを適切に。エンコードされたURLでも、正常に機能するように機能しません。

URLの一般的な特殊文字をパスワードに使用しないでください。

次のいずれかのように: : . ? + %


元の間違った答え:

エラーメッセージは、の使用について明らかに不満を示しPLAINています。これは、資格情報が間違っていることを意味するのではなく、プレーンテキストの代わりに暗号化データ配信(TLS)を使用する必要があることを意味します。

これを解決するにamqp://は、接続文字列をamqps://(に注意s)に変更します。


2

RabbitMqに接続するためのログインパスワードを追加するだけです

 CachingConnectionFactory connectionFactory = 
         new CachingConnectionFactory("rabbit_host");

 connectionFactory.setUsername("login");
 connectionFactory.setPassword("password");

2

数字をパスワードとして使用する場合は、文字列を使用してパスワードを変更してみてください。

ウェブサイトでdeltaqin:000000を使用してログインできますが、プログラムの実行中にこれが発生しました。次に、パスワードをdeltaiqnに変更します。そしてそれは動作します。


0

@grepitが作ったものを正確に作りました。

しかし、Javaコードにいくつかの変更を加える必要がありました。

プロデューサーとレシーバーのプロジェクトで、次のように変更しました。

ConnectionFactory factory = new ConnectionFactory();
factory.setHost("your-host-ip");
factory.setUsername("username-you-created");
factory.setPassword("username-password");

        

そうすることで、作成したユーザーとして特定のホストに接続します。わたしにはできる!


0

スプリングブートのパスワード(spring.rabbitmq.password = rabbit)の最後の空白が原因でこの問題に直面していました。application.propertiesは空白を削除すると解決しました。このチェックリストがこの問題に直面している人に役立つことを願っています。


-3

ConnectionFactoryまたはConnectionホスト名をlocalhostに設定します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.