ローカル ActivityPub アクターがキーペアなしで生成されている件

Discourse から Mastodon への投稿のフェデレーション方法がわかりません。アクティビティをフォローすることはできます。投稿を配信しようとすると、ログに次のエラーが表示されます。

[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/a93549c3c7883784eda700f30de0c96b failed to deliver to https://mstdn.party/users/staff/inbox --- !ruby/hash:ActiveSupport::HashWithIn
[Discourse Activity Pub] POST request to https://mastodon.neat.computer/users/jonah/inbox failed: Expected([200, 201, 202]) <=> Actual(401 Unauthorized)
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce failed to deliver to https://mastodon.neat.computer/users/jonah/inbox --- !ruby/hash:ActiveSupport:
[Discourse Activity Pub] POST request to https://mstdn.party/users/staff/inbox failed: Expected([200, 201, 202]) <=> Actual(401 Unauthorized)

設定で Activity pub require signed requests を無効にし、ロギングを有効にしましたが、それ以外はすべてデフォルト設定のままです。これらの Mastodon インスタンスは Cloudflare の背後にありますが、Cloudflare がリクエストをブロックしている様子はなく、mastodon-web サービスログは Mastodon 自体が 401 コードを返していることを示しています(ただし、その理由を確認するために Mastodon のログの詳細度を上げる方法がわかりません)。

これが発生する理由として考えられることはありますか?

編集:Mastodon は HTTP署名を好まないようです。ただし、このインスタンスには「Authorized Fetch」は有効になっていません。

Mar 08 16:47:07 neat-mastodon bundle[3119591]: D, [2025-03-08T16:47:07.963455 #3119591] DEBUG -- : [e6b2bc50-09e1-464e-a937-4c43ef32bd99] Signature verification failed: Request not signed
Mar 08 16:47:07 neat-mastodon bundle[3119591]: I, [2025-03-08T16:47:07.964520 #3119591]  INFO -- : [e6b2bc50-09e1-464e-a937-4c43ef32bd99] method=POST path=/users/jonah/inbox format=html controller=ActivityPub::InboxesController action=create status=401 allocations=1256 duration=9.15 view=0.69 db=1.86

編集 2:私の Discourse ユーザーのインボックスにアクセスできないようです:https://verify.funfedi.dev/?actor_uri=jonah%40discuss.privacyguides.net

    "Resolving acct:jonah@discuss.privacyguides.net using webfinger",
    "Resolved to https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce",
    "Running verification for alice",
    "Got inbox None", [...]

グループアクティビティの場合は期待どおりに機能します:https://verify.funfedi.dev/?actor_uri=articles%40discuss.privacyguides.net :thinking:

編集 3:https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce への GET リクエストの場合

{
    "id": "https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce",
    "type": "Person",
    "updated": "2025-03-08T06:34:19Z",
    "url": "https://discuss.privacyguides.net/u/jonah",
    "name": "Jonah Aragon",
    "inbox": null,
    "outbox": null,
    "sharedInbox": "https://discuss.privacyguides.net/ap/users/inbox",
    "followers": "https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce/followers",
    "preferredUsername": "jonah",
    "icon": {
        "type": "Image",
        "mediaType": "image/png",
        "url": "https://forum-cdn.privacyguides.net/user_avatar/discuss.privacyguides.net/jonah/96/8151_2.png"
    },
    "@context": "https://www.w3.org/ns/activitystreams"
}

@JonahAragon1 さん、解決策を見つけましょう。

テストの前と後に無効にしましたか?前に無効にした場合は、有効にしてみてください。

より広範には、さまざまなケースの診断を容易にするために、より優れたエラー応答メッセージロギングを追加したいと考えていました。そのために、PR を作成しました。

それがマージされたら、もう一度試して、同じログを共有していただけますか。

「いいね!」 1

この設定は、ユーザーの受信トレイが作成されていないことが問題だと特定したので、再び有効にしました。プラグインを更新します :+1:

現在、ディスコースのパーソンアクターであるユーザーは個別の受信トレイを持つことは想定されていません。Mastodon は sharedInbox を使用し、それを理解しています。他に何か問題があるはずです。

ログを除き、すべての設定がデフォルトに戻っています。

[Discourse Activity Pub] POST リクエスト https://mastodon.neat.computer/users/jonah/inbox は失敗しました: {"error":"Request not signed"}
バックトレース
activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:130:in `block in warn'

activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in `block in dispatch'

activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in `each'

activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in `dispatch'

activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:130:in `warn'

/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/logger.rb:26:in `log'

/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/logger.rb:63:in `warn'

/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/request.rb:66:in `rescue in perform'

/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/request.rb:48:in `perform'

/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/request.rb:44:in `post_json_ld'

/var/www/discourse/plugins/discourse-activity-pub/app/jobs/discourse_activity_pub_deliver.rb:34:in `perform_request'

/var/www/discourse/plugins/discourse-activity-pub/app/jobs/discourse_activity_pub_deliver.rb:15:in `execute'

/var/www/discourse/app/jobs/base.rb:316:in `block (2 levels) in perform'

/var/www/discourse/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'
/var/www/discourse/app/jobs/base.rb:303:in `block in perform'

/var/www/discourse/app/jobs/base.rb:299:in `each'

/var/www/discourse/app/jobs/base.rb:299:in `perform'

sidekiq-7.3.9/lib/sidekiq/processor.rb:220:in `execute_job'

sidekiq-7.3.9/lib/sidekiq/processor.rb:185:in `block (4 levels) in process'

sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:180:in `traverse'

sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'

/var/www/discourse/lib/sidekiq/pausable.rb:132:in `call'

sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182:in `traverse'

sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'

sidekiq-7.3.9/lib/sidekiq/job/interrupt_handler.rb:9:in `call'

sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182:in `traverse'

sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'

sidekiq-7.3.9/lib/sidekiq/metrics/tracking.rb:26:in `track'

sidekiq-7.3.9/lib/sidekiq/metrics/tracking.rb:134:in `call'

sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182:in `traverse'

sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:173:in `invoke'

sidekiq-7.3.9/lib/sidekiq/processor.rb:184:in `block (3 levels) in process'

sidekiq-7.3.9/lib/sidekiq/processor.rb:145:in `block (6 levels) in dispatch'

sidekiq-7.3.9/lib/sidekiq/job_retry.rb:118:in `local'

sidekiq-7.3.9/lib/sidekiq/processor.rb:144:in `block (5 levels) in dispatch'

sidekiq-7.3.9/lib/sidekiq/config.rb:39:in `block in <class:Config>'

sidekiq-7.3.9/lib/sidekiq/processor.rb:139:in `block (4 levels) in dispatch'

sidekiq-7.3.9/lib/sidekiq/processor.rb:281:in `stats'

sidekiq-7.3.9/lib/sidekiq/processor.rb:134:in `block (3 levels) in dispatch'

sidekiq-7.3.9/lib/sidekiq/job_logger.rb:15:in `call'

sidekiq-7.3.9/lib/sidekiq/processor.rb:133:in `block (2 levels) in dispatch'

sidekiq-7.3.9/lib/sidekiq/job_retry.rb:85:in `global'

sidekiq-7.3.9/lib/sidekiq/processor.rb:132:in `block in dispatch'

sidekiq-7.3.9/lib/sidekiq/job_logger.rb:40:in `prepare'

sidekiq-7.3.9/lib/sidekiq/processor.rb:131:in `dispatch'

sidekiq-7.3.9/lib/sidekiq/processor.rb:183:in `block (2 levels) in process'

sidekiq-7.3.9/lib/sidekiq/processor.rb:182:in `handle_interrupt'

sidekiq-7.3.9/lib/sidekiq/processor.rb:182:in `block in process'

sidekiq-7.3.9/lib/sidekiq/processor.rb:181:in `handle_interrupt'

sidekiq-7.3.9/lib/sidekiq/processor.rb:181:in `process'

sidekiq-7.3.9/lib/sidekiq/processor.rb:86:in `process_one'

sidekiq-7.3.9/lib/sidekiq/processor.rb:76:in `run'

sidekiq-7.3.9/lib/sidekiq/component.rb:10:in `watchdog'

sidekiq-7.3.9/lib/sidekiq/component.rb:19:in `block in safe_thread'

Mastodon の問題は、リクエストに署名されていないことのようです。

Activity pub require signed requests を再度有効にした後に、そのログエントリが作成されたことを確認しましたか?

その通りです。

申し訳ありませんが、この件で再度ご連絡いたします。しかし、Mastodonはリクエストヘッダーに署名が全くない場合にそのエラーを返します。そのため、リクエストが送信されたときに Activity pub require signed requests が有効になっていた可能性は低いと思われます。全く新しい POST リクエストをトリガーしていただけますでしょうか。

ああ、おそらく問題はCloudflareがリクエストからヘッダーを削除していることだと思います。

「いいね!」 1

はい、これはデフォルト設定で、その設定が有効になっている場合のエラーです。

[Discourse Activity Pub] https://mstdn.party/users/staff/inbox への POST リクエストが失敗しました: {"error":"Request not signed"}
10:40 am
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce から https://mstdn.party/users/staff/inbox への配信に失敗しました --- !ruby/hash:ActiveSupport::HashWithIn
10:40 am
[Discourse Activity Pub] https://mastodon.neat.computer/users/jonah/inbox への POST リクエストが失敗しました: {"error":"Request not signed"}
10:40 am
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce から https://mastodon.neat.computer/users/jonah/inbox への配信に失敗しました --- !ruby/hash:ActiveSupport::
10:40 am
[Discourse Activity Pub] https://social.lol/users/jonah/inbox への POST リクエストが失敗しました: {"error":"Request not signed"}
10:40 am
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce から https://social.lol/users/jonah/inbox への配信に失敗しました --- !ruby/hash:ActiveSupport::HashWithInd

(social.lol もフォーラムも Cloudflare の背後にはありません。)

編集:Mastodon アカウントから @videos@discuss.privacyguides.net をフォローしたい場合、それが機能することを確認できれば、フォーラムから投稿を再送信できます。

わかりました、その俳優さんで新しい投稿を作成してください。

投稿は正しく受信されましたか?受信されたようです。

 2
[Discourse Activity Pub] POST request to https://angus.ngrok.io/ap/actor/0eafb34c67153d61db44234de294a98d/inbox failed: {"errors":["Request not signed"]}
10:56 am
2
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce failed to deliver to https://angus.ngrok.io/ap/actor/0eafb34c67153d61db44234de294a98d/inbox --- !ru
10:56 am
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/705b7513d0446e001d7f750115e6395f successfully delivered to https://mstdn.party/users/staff/inbox --- !ruby/hash:ActiveSupport::HashW
11:00 am
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/705b7513d0446e001d7f750115e6395f successfully delivered to https://social.lol/users/jonah/inbox --- !ruby/hash:ActiveSupport::HashWi
11:00 am
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/705b7513d0446e001d7f750115e6395f successfully delivered to https://mastodon.neat.computer/users/jonah/inbox --- !ruby/hash:ActiveSup
11:00 am
3
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce failed to deliver to https://mstdn.party/users/staff/inbox --- !ruby/hash:ActiveSupport::HashWithIn
11:01 am
3
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce failed to deliver to https://social.lol/users/jonah/inbox --- !ruby/hash:ActiveSupport::HashWithInd
11:01 am
3
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce failed to deliver to https://mastodon.neat.computer/users/jonah/inbox --- !ruby/hash:ActiveSupport:
11:01 am
2
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce failed to deliver to https://mstdn.party/users/staff/inbox --- !ruby/hash:ActiveSupport::HashWithIn
11:01 am
2
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce failed to deliver to https://mastodon.neat.computer/users/jonah/inbox --- !ruby/hash:ActiveSupport:
11:01 am
2
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce failed to deliver to https://social.lol/users/jonah/inbox --- !ruby/hash:ActiveSupport::HashWithInd
11:01 am
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce successfully delivered to https://angus.ngrok.io/ap/actor/0eafb34c67153d61db44234de294a98d/inbox --
11:01 am
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce successfully delivered to https://angus.ngrok.io/ap/actor/0eafb34c67153d61db44234de294a98d/inbox --
11:01 am
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/705b7513d0446e001d7f750115e6395f successfully delivered to https://angus.ngrok.io/ap/actor/0eafb34c67153d61db44234de294a98d/inbox --
11:01 am
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/a93549c3c7883784eda700f30de0c96b successfully delivered to https://angus.ngrok.io/ap/actor/0eafb34c67153d61db44234de294a98d/inbox --
11:02 am
2
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/a93549c3c7883784eda700f30de0c96b failed to deliver to https://mstdn.party/users/staff/inbox --- !ruby/hash:ActiveSupport::HashWithIn
11:02 am
2
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/a93549c3c7883784eda700f30de0c96b failed to deliver to https://mastodon.neat.computer/users/jonah/inbox --- !ruby/hash:ActiveSupport:
11:02 am
2
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/a93549c3c7883784eda700f30de0c96b failed to deliver to https://social.lol/users/jonah/inbox --- !ruby/hash:ActiveSupport::HashWithInd
11:02 am
15
[Discourse Activity Pub] POST request to https://mastodon.neat.computer/users/jonah/inbox failed: {"error":"Request not signed"}
11:02 am
12
[Discourse Activity Pub] POST request to https://social.lol/users/jonah/inbox failed: {"error":"Request not signed"}
11:02 am
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce failed to deliver to https://mastodon.neat.computer/users/jonah/inbox --- !ruby/hash:ActiveSupport:
11:02 am
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce failed to deliver to https://social.lol/users/jonah/inbox --- !ruby/hash:ActiveSupport::HashWithInd
11:02 am
[Discourse Activity Pub] POST request to https://angus.ngrok.io/ap/actor/0eafb34c67153d61db44234de294a98d/inbox failed: The endpoint angus.ngrok.io is offline. ERR_NGROK_3200
11:02 am
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce failed to deliver to https://angus.ngrok.io/ap/actor/0eafb34c67153d61db44234de294a98d/inbox --- !ru
11:02 am
16
[Discourse Activity Pub] POST request to https://mstdn.party/users/staff/inbox failed: {"error":"Request not signed"}
11:02 am
2
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce failed to deliver to https://mstdn.party/users/staff/inbox --- !ruby/hash:ActiveSupport::HashWithIn
11:02 am

@JonahAragon1さんと私はチャットでこの件について話し合いましたが、問題はローカルユーザーアクターがキーペアなしで作成されていることのようです。

@JonahAragon1、いくつかテストして、また連絡します。

「いいね!」 1

Hey @JonahAragon1

あなたのフォーラムでは、これらのユーザー間に何か違いはありますか?何か思いつくことはありますか?

ShampooBhaelrosのアクターにはキーが作成されましたが、basenotejonahには作成されていません。あなたのサイトでは、これら2つのユーザーグループ間に一般的な違いはありますか?

うーん、いいえ。これといった理由は思いつきません。jonah は管理者ですが、他は通常のユーザーです。

その他

Bhaelrosbasenote はどちらもトラストレベル3のレギュラーなので、同じはずです。

basenotejonah には生成されなかったのに、Shampoo にも受信トレイ/送信トレイが生成されているのは奇妙です。ensure_keysensure_inbox_and_outbox も機能していないのでしょうか?

GET https://discuss.privacyguides.net/ap/actor/310a0986b6bf613b61ca5e85a8521ecb

{
    "id": "https://discuss.privacyguides.net/ap/actor/310a0986b6bf613b61ca5e85a8521ecb",
    "type": "Person",
    "updated": "2025-03-11T17:58:08Z",
    "url": "https://discuss.privacyguides.net/u/Shampoo",
    "inbox": "https://discuss.privacyguides.net/ap/actor/310a0986b6bf613b61ca5e85a8521ecb/inbox",
    "outbox": "https://discuss.privacyguides.net/ap/actor/310a0986b6bf613b61ca5e85a8521ecb/outbox",
    "sharedInbox": "https://discuss.privacyguides.net/ap/users/inbox",
    "followers": "https://discuss.privacyguides.net/ap/actor/310a0986b6bf613b61ca5e85a8521ecb/followers",
    "preferredUsername": "Shampoo",
    "publicKey": {
        "id": "https://discuss.privacyguides.net/ap/actor/310a0986b6bf613b61ca5e85a8521ecb#main-key",
        "owner": "https://discuss.privacyguides.net/ap/actor/310a0986b6bf613b61ca5e85a8521ecb",
        "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAleqeCRZW1utTN/L5GjkY\n+2Baron4FnSKRMKW70IWfqI4rs8dfh2xhKW5qXxaBPhXf13FAOJvQvFhQ90eqRrn\nKkuMsntZN0dfpDUZ3E0iIp8fuUEVk2PmquLziiy9+zu8n5ak65lJKDYnKVtFth5G\nFJyUt6GYicY8UlUh6dPxafJ/gw6YTlvT3hO0X0H0L+hYwqHJpppl6niSDi6WQzME\nWM1hyBpv2Y2NspEexrkSVh+SIR3nJ8J1R+o+2bLJ4Hl34nYhtNyTy9AOddoQYDMw\nICZAkCLQDweid50fGakWmRB5EXfL6s2EdzEh8MOE7cyCOXgFrxTJYUTwg5TiLEQY\npQIDAQAB\n-----END PUBLIC KEY-----\n"
    },
    "icon": {
        "type": "Image",
        "mediaType": "image/png",
        "url": "https://forum-cdn.privacyguides.net/user_avatar/discuss.privacyguides.net/shampoo/96/4073_2.png"
    },
    "@context": "https://www.w3.org/ns/activitystreams"
}

GET https://discuss.privacyguides.net/ap/actor/a93549c3c7883784eda700f30de0c96b

{
    "id": "https://discuss.privacyguides.net/ap/actor/a93549c3c7883784eda700f30de0c96b",
    "type": "Person",
    "updated": "2025-03-08T06:34:19Z",
    "url": "https://discuss.privacyguides.net/u/basenote",
    "inbox": null,
    "outbox": null,
    "sharedInbox": "https://discuss.privacyguides.net/ap/users/inbox",
    "followers": "https://discuss.privacyguides.net/ap/actor/a93549c3c7883784eda700f30de0c96b/followers",
    "preferredUsername": "basenote",
    "icon": {
        "type": "Image",
        "mediaType": "image/png",
        "url": "https://forum-cdn.privacyguides.net/user_avatar/discuss.privacyguides.net/basenote/96/15_2.png"
    },
    "@context": "https://www.w3.org/ns/activitystreams"
}

これらのアクターがこの状態になったのか、まだよくわかりません。これはあなたのサイト固有の問題です。一般的に、アクターキーと受信トレイ/送信トレイの作成は期待どおりに機能します。それにもかかわらず、このアップデートにより、そのような状況が必要に応じて解決されるはずです。

「いいね!」 1

@JonahAragon1 PRはマージされました。更新して、うまくいったかどうか教えていただけますか?

「いいね!」 1

この特定の問題は修正されたようですが、Mastodon に投稿が表示されないという一般的な問題にまだ遭遇しています。

もう少し詳しい情報を共有していただけますか?

はい、今週中に返信するか新しい投稿をしますが、今は不在です。

私が確認している主な問題は、投稿がカテゴリのアクターによってブーストとして表示されないこと(時々、ユーザーアクターを直接検索することでMastodonで見つけることができます)、そしてフォーラムの投稿がそもそもAPに公開されないことです。また、以前は問題なかった新しいカテゴリのアクターをフォローするのに苦労しています。ここを見ると、フォロワーに結果が見つかりません。

APが有効になっているカテゴリのMetaの多くの投稿で、APに公開されていないことを示すインジケーターが表示されていることに気づきました(この投稿のように)、もしかしたらこれがどのように機能するのか理解できていないだけかもしれません…

これらの問題についてログに明らかなエラーは出ていません。成功したログ通知に基づくと、すべてが正常に機能しているように思われるはずです。これらはすべて、時間があるときにさらに調査する必要があることです。