Ativistas Local ActivityPub estão sendo criados sem pares de chaves

Não consigo descobrir como fazer com que nenhuma postagem seja federada para o Mastodon, consigo seguir os atores normalmente. Recebo os seguintes erros nos logs quando o Discourse tenta entregar uma postagem:

[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)

Desativei Activity pub require signed requests e ativei o registro nas configurações, caso contrário, todas as configurações ainda são as padrão. Essas instâncias do Mastodon estão atrás do Cloudflare, mas posso ver que o Cloudflare não está bloqueando as solicitações, e os logs do serviço mastodon-web mostram que o próprio Mastodon está retornando os códigos 401 (embora eu não saiba como aumentar a verbosidade dos logs do Mastodon para ver por que isso está acontecendo).

Há alguma razão para isso acontecer?

Editar: O Mastodon não gosta das assinaturas HTTP, embora esta instância não tenha o Authorized Fetch habilitado:

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

Editar 2: Parece que a caixa de entrada dos meus usuários do Discourse está inacessível: 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", [...]

Funciona como esperado para o ator do grupo: https://verify.funfedi.dev/?actor_uri=articles%40discuss.privacyguides.net :thinking:

Editar 3: para uma solicitação GET para https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce

{
    "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"
}

Olá @JonahAragon1, vamos ver se conseguimos resolver isso.

Você desativou isso antes ou depois de testar? Se foi antes, tente ativá-lo.

De forma mais ampla, eu estava pensando em adicionar um registro de mensagens de erro mais detalhado para facilitar o diagnóstico de diferentes casos. Para esse fim, levantei um PR

Se você pudesse tentar novamente quando isso for mesclado e compartilhar os mesmos logs.

1 curtida

Eu tenho essa configuração habilitada novamente agora que identifiquei o problema como a não criação das caixas de entrada do usuário. Vou atualizar o plugin agora :+1:

Atualmente, os Usuários de Atores de Discurso de Pessoas não têm caixas de entrada individuais. O Mastodon usa e entende a sharedInbox. Há algo mais acontecendo.

Além do registro, todas as configurações voltaram aos seus padrões:

[Discourse Activity Pub] POST request to https://mastodon.neat.computer/users/jonah/inbox failed: {"error":"Request not signed"}
backtrace
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'

rails_multisite-6.1.0/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'

Ei, parece que o problema que o Mastodon tem é que a solicitação não está assinada.

Você tem certeza de que essa entrada de log foi criada depois que você reativou Activity pub require signed requests?

Isso mesmo, sim.

Desculpe insistir, no entanto, o Mastodon retorna esse erro quando não há assinatura nos cabeçalhos da solicitação, portanto, parece improvável que Activity pub require signed requests estivesse habilitado quando a solicitação foi enviada. Você poderia acionar uma solicitação POST totalmente nova.

Ah, eu acho que o problema é que o Cloudflare está removendo os cabeçalhos da requisição.

1 curtida

Sim, este é o erro com as configurações em seus padrões e essa configuração ativada.

[Discourse Activity Pub] POST request to https://mstdn.party/users/staff/inbox failed: {"error":"Request not signed"}
10:40 am
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce failed to deliver to https://mstdn.party/users/staff/inbox --- !ruby/hash:ActiveSupport::HashWithIn
10:40 am
[Discourse Activity Pub] POST request to https://mastodon.neat.computer/users/jonah/inbox failed: {"error":"Request not signed"}
10:40 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::
10:40 am
[Discourse Activity Pub] POST request to https://social.lol/users/jonah/inbox failed: {"error":"Request not signed"}
10:40 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

(Observarei que social.lol não está atrás do Cloudflare, nem o fórum)

Editar: se você quiser seguir @videos@discuss.privacyguides.net de uma conta Mastodon que você sabe que funciona, me avise e posso reenviar uma postagem do fórum.

Ok, por favor, crie um novo post com esse ator.

Você recebeu as postagens corretamente? Parece que sim.

 2
[Discourse Activity Pub] A solicitação POST para https://angus.ngrok.io/ap/actor/0eafb34c67153d61db44234de294a98d/inbox falhou: {"errors":["Request not signed"]}
10:56
2
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce falhou ao entregar para https://angus.ngrok.io/ap/actor/0eafb34c67153d61db44234de294a98d/inbox --- !ruby/hash:ActiveSupport::HashW
10:56
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/705b7513d0446e001d7f750115e6395f foi entregue com sucesso para https://mstdn.party/users/staff/inbox --- !ruby/hash:ActiveSupport::HashW
11:00
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/705b7513d0446e001d7f750115e6395f foi entregue com sucesso para https://social.lol/users/jonah/inbox --- !ruby/hash:ActiveSupport::HashWi
11:00
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/705b7513d0446e001d7f750115e6395f foi entregue com sucesso para https://mastodon.neat.computer/users/jonah/inbox --- !ruby/hash:ActiveSup
11:00
3
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce falhou ao entregar para https://mstdn.party/users/staff/inbox --- !ruby/hash:ActiveSupport::HashWithIn
11:01
3
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce falhou ao entregar para https://social.lol/users/jonah/inbox --- !ruby/hash:ActiveSupport::HashWithInd
11:01
3
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce falhou ao entregar para https://mastodon.neat.computer/users/jonah/inbox --- !ruby/hash:ActiveSupport:
11:01
2
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce falhou ao entregar para https://mstdn.party/users/staff/inbox --- !ruby/hash:ActiveSupport::HashWithIn
11:01
2
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce falhou ao entregar para https://mastodon.neat.computer/users/jonah/inbox --- !ruby/hash:ActiveSupport:
11:01
2
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce falhou ao entregar para https://social.lol/users/jonah/inbox --- !ruby/hash:ActiveSupport::HashWithInd
11:01
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce foi entregue com sucesso para https://angus.ngrok.io/ap/actor/0eafb34c67153d61db44234de294a98d/inbox --
11:01
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce foi entregue com sucesso para https://angus.ngrok.io/ap/actor/0eafb34c67153d61db44234de294a98d/inbox --
11:01
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/705b7513d0446e001d7f750115e6395f foi entregue com sucesso para https://angus.ngrok.io/ap/actor/0eafb34c67153d61db44234de294a98d/inbox --
11:01
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/a93549c3c7883784eda700f30de0c96b foi entregue com sucesso para https://angus.ngrok.io/ap/actor/0eafb34c67153d61db44234de294a98d/inbox --
11:02
2
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/a93549c3c7883784eda700f30de0c96b falhou ao entregar para https://mstdn.party/users/staff/inbox --- !ruby/hash:ActiveSupport::HashWithIn
11:02
2
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/a93549c3c7883784eda700f30de0c96b falhou ao entregar para https://mastodon.neat.computer/users/jonah/inbox --- !ruby/hash:ActiveSupport:
11:02
2
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/a93549c3c7883784eda700f30de0c96b falhou ao entregar para https://social.lol/users/jonah/inbox --- !ruby/hash:ActiveSupport::HashWithInd
11:02
15
[Discourse Activity Pub] A solicitação POST para https://mastodon.neat.computer/users/jonah/inbox falhou: {"error":"Request not signed"}
11:02
12
[Discourse Activity Pub] A solicitação POST para https://social.lol/users/jonah/inbox falhou: {"error":"Request not signed"}
11:02
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce falhou ao entregar para https://mastodon.neat.computer/users/jonah/inbox --- !ruby/hash:ActiveSupport:
11:02
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce falhou ao entregar para https://social.lol/users/jonah/inbox --- !ruby/hash:ActiveSupport::HashWithInd
11:02
[Discourse Activity Pub] A solicitação POST para https://angus.ngrok.io/ap/actor/0eafb34c67153d61db44234de294a98d/inbox falhou: O endpoint angus.ngrok.io está offline. ERR_NGROK_3200
11:02
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce falhou ao entregar para https://angus.ngrok.io/ap/actor/0eafb34c67153d61db44234de294a98d/inbox --- !ru
11:02
16
[Discourse Activity Pub] A solicitação POST para https://mstdn.party/users/staff/inbox falhou: {"error":"Request not signed"}
11:02
2
[Discourse Activity Pub] https://discuss.privacyguides.net/ap/actor/227cc2ddaa4ded69c2a58214031da3ce falhou ao entregar para https://mstdn.party/users/staff/inbox --- !ruby/hash:ActiveSupport::HashWithIn
11:02 

Note que @JonahAragon1 e eu discutimos isso por chat e o problema é que os Atores de Usuário locais estão sendo criados de alguma forma sem pares de chaves.

@JonahAragon1 Vou testar algumas coisas e volto a falar com você.

1 curtida

Olá @JonahAragon1,

Existem diferenças entre esses usuários no seu fórum, algo que lhe venha à mente?

As chaves foram criadas para os atores Shampoo e Bhaelros, mas não para basenote e jonah. Existem diferenças comuns entre esses dois grupos de usuários no seu site?

Hm, não. Não consigo pensar em nenhuma razão para isso. Enquanto jonah é um administrador, os outros são usuários normais.

misc.

Bhaelros e basenote são ambos Usuários Nível 3, então deveriam ser iguais.

É estranho que Shampoo também tenha a caixa de entrada/saída gerada enquanto basenote e jonah não tiveram, então nem ensure_keys nem ensure_inbox_and_outbox estão funcionando?:

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"
}

Ainda não tenho certeza de como esses atores chegaram a esse estado. É específico do seu site. Em geral, a criação de chaves de ator e caixas de entrada/saída funciona como esperado. No entanto, esta atualização deve garantir que tal situação seja resolvida conforme necessário:

1 curtida

@JonahAragon1 O PR foi mesclado. Você poderia tentar atualizar e me dizer como foi?

1 curtida

Este problema específico parece ter sido corrigido, embora eu ainda esteja tendo problemas gerais para exibir postagens no Mastodon.

Você poderia compartilhar mais alguns detalhes?

Sim, responderei ou farei uma nova postagem esta semana, estou apenas ausente no momento.

As principais questões que estou vendo são posts que não aparecem como boosts pelo ator da categoria (às vezes consigo encontrá-los no Mastodon pesquisando manualmente pelo ator do usuário), e posts do fórum que não são publicados no AP em primeiro lugar. Também estou tendo problemas para seguir novos atores de categoria agora, o que não era um problema antes. Se eu olhar aqui, diz que nenhum resultado foi encontrado em seguidores.

Notei que muitos posts aqui no Meta em categorias habilitadas para AP aparecem com indicadores de que não foram publicados no AP também (como este post), então talvez eu apenas não entenda como isso deveria funcionar…

Não estou recebendo erros óbvios nos logs para nada disso, você pensaria que tudo está funcionando bem com base nas notificações de log bem-sucedidas. São todas coisas que terei que investigar mais quando tiver mais tempo.