>inbound verification
Is it enabled on this instance? I tried to send a POST request signed according to RFC-9421 to your inbox, the response was 401.
Timestamp: 2026-05-06T12:50:30Z
cc @mariusor
>inbound verification
Is it enabled on this instance? I tried to send a POST request signed according to RFC-9421 to your inbox, the response was 401.
Timestamp: 2026-05-06T12:50:30Z
cc @mariusor
@mariusor @Marius @marius Sent another one to https://marius.federated.id/inbox
2026-05-06T18:33:57Z
I'm not sure which instance you mean, these two actors are different.
The first one is on an instance that should have RFC9421 enabled, but the second isn't.
I enabled request debug on it, if you want to try again.
@mariusor I created it manually. Too lazy to add object :]
@silverpill also, what the hell is that Activity? A Like without an object... o.O
@silverpill the problem is missing nonces even when not specified in the signature-input.
6:33PM WRN Failed to load actor err="verification failed: parameter error: nonce validation failed: nonce already seen" log=auth
I'll review if the error is on my end, or in the library itself. I just realized this is the same issue I had with signatures coming from tags.pub at some point.
I'll probably message you with an update sometime tomorrow. Thank you for giving it a try. 🫡
@mariusor Still returns 401.
The timestamp is 2026-05-08T11:20:47Z
@silverpill when you get a chance, please send another request. While waiting for the upstream to solve the issue, I fixed on my end trying to validate missing nonces.
@mariusor It is possible that the signature is incorrect, but my own verifier can verify the signature. I assume that my verifier is good enough because it is compatible with several known RFC-9421 implementers (fedify, tootik, etc).
Another data point: mastodon.social accepts my RFC-9421 signed POST request, returns 202.
Components used in the signature base: @method, @target-uri, content-digest, @signature-params.
> I might use a locally cached version that's out of date
@silverpill it's not that, the key online matches the public key in cache.
Have you tested the key generation against some known vectors?
The only explanation I can come up with is that the signature is somehow incorrect... :(
(On my side I checked the verifier against the test examples given in the RFC9421, so I'm 90% confident the code should work as intended)
@mariusor Made another one.
The response is {"@context":"http://marius.federated.id/ns#errors","errors":{"status":401,"message":"authorized Actor is invalid"}}
@silverpill gaaah!! 😱
Thank you.
The log is just telling me the signature failed verification:
err="actor IRI https://mitra.social/users/silverpill: verification failed: invalid signature: crypto/rsa: verification error"
Did you by any chance update your key recently? (I might use a locally cached version that's out of date, version in cache is since May 2025)
@silverpill damn, I didn't have debugging enabled after restarting the server. I found the request, but the errors are not very enlightening on signature check failure.
Could you do another one please. 🙇
@mariusor Sure, I'll prepare an example.
@silverpill ok, cool, that makes sense too.
Would it be too much trouble for you to create a minimum example that generates a signature using your libraries so I can adapt it to test on my dev setup?
@mariusor That's possible.
@target-uri is supposed to be an absolute URI. HTTP servers typically re-construct full URI using the Host and other headers. For example, I use this method: https://docs.rs/actix-web/latest/actix_web/dev/struct.ConnectionInfo.html#method.host
Hostname is resolved through the following, in order:
Forwarded header
X-Forwarded-Host header
Host header
request target / URI
configured server hostname
If I don't configure my reverse proxy to set these headers, the full URI will be incorrect, leading to verification failure.
@silverpill to come back to this, I have added both this example and one of your original requests to the unit-tests, and they both validate correctly.
So I still have no idea why this is failing in production. The only thing I can think of is the http proxy messing with the value of the "target-uri" parameter.
@mariusor https://marius.federated.id still returns 401
{"@context":"http://marius.federated.id/ns#errors","errors":{"status":401,"message":"authorized Actor is invalid"}}https://metalhead.club/@mariusor/116691230280367219
@silverpill I wonder if this might have been also the culprit for why ONI was failing your otherwise correct RFC9421 signature requests.
:think_bread:
GNU social JP is a social network, courtesy of GNU social JP管理人. It runs on GNU social, version 2.0.2-dev, available under the GNU Affero General Public License.
All GNU social JP content and data are available under the Creative Commons Attribution 3.0 license.