DiscourseConnect Payload Hash-Kodierung-Fehlübereinstimmung

Ich habe das noch nicht auf meiner Website getestet. Ich versuche zunächst, die Schritte manuell nachzuvollziehen.

Aus dem zuvor erwähnten Forenbeitrag:

Gegeben folgende Einstellungen:
Discourse-Domain: http://discuss.example.com
DiscourseConnect-URL: http://www.example.com/discourse/sso
DiscourseConnect-Geheimnis: d836444a9e4084d5b224a60c208dce14

Benutzer versucht sich einzuloggen

  • Nonce wird generiert: cb68251eefb5211e58c00ff1395f0c0b
  • Roher Payload wird generiert: nonce=cb68251eefb5211e58c00ff1395f0c0b
  • Payload wird Base64-kodiert: bm9uY2U9Y2I2ODI1MWVlZmI1MjExZTU4YzAwZmYxMzk1ZjBjMGI=\n
  • Payload wird URL-kodiert: bm9uY2U9Y2I2ODI1MWVlZmI1MjExZTU4YzAwZmYxMzk1ZjBjMGI%3D%0A
  • HMAC-SHA256 wird auf dem Base64-kodierten Payload generiert: 2828aa29899722b35a2f191d34ef9b3ce695e0e6eeec47deb46d588d70c7cb56

Hier erhalte ich ein anderes Ergebnis. Als ich den von dir vorgeschlagenen HMAC-Encoder für den Base64-kodierten, nicht URL-kodierten Payload verwendete, erhielt ich d26d5adf900de48890a0c3dcdeec108acd91b44a4b76c90c59955a5ba7b957f7 anstelle von 2828aa29899722b35a2f191d34ef9b3ce695e0e6eeec47deb46d588d70c7cb56. Wenn ich ihn auf den URL-kodierten Payload anwende, erhalte ich 46e749cd26dcabc84eed323ff31f830da674dc87c77a2fcb1b296f76402ea900.

Später im Tutorial jedoch, bei der Erstellung des neuen Payloads:

Unsignierter Payload wird generiert:
nonce=cb68251eefb5211e58c00ff1395f0c0b&name=sam&username=samsam&email=test%40test.com&external_id=hello123&require_activation=true
(Reihenfolge ist egal, Werte sind URL-kodiert)

Payload wird Base64-kodiert
bm9uY2U9Y2I2ODI1MWVlZmI1MjExZTU4YzAwZmYxMzk1ZjBjMGImbmFtZT1zYW0mdXNlcm5hbWU9c2Ftc2FtJmVtYWlsPXRlc3QlNDB0ZXN0LmNvbSZleHRlcm5hbF9pZD1oZWxsbzEyMyZyZXF1aXJlX2FjdGl2YXRpb249dHJ1ZQ==

Payload wird URL-kodiert
bm9uY2U9Y2I2ODI1MWVlZmI1MjExZTU4YzAwZmYxMzk1ZjBjMGImbmFtZT1zYW0mdXNlcm5hbWU9c2Ftc2FtJmVtYWlsPXRlc3QlNDB0ZXN0LmNvbSZleHRlcm5hbF9pZD1oZWxsbzEyMyZyZXF1aXJlX2FjdGl2YXRpb249dHJ1ZQ%3D%3D

Der Base64-kodierte Payload wird signiert
3d7e5ac755a87ae3ccf90272644ed2207984db03cf020377c8b92ff51be3abc3

Diese Signatur wird durch Hashing des Base64-kodierten, nicht URL-kodierten Payloads erzeugt. Daher bin ich etwas unsicher, warum das beim ersten Payload nicht funktioniert.