misskey-dev / misskey

🌎 A completely free and open interplanetary microblogging platform 🚀
https://misskey-hub.net/
GNU Affero General Public License v3.0
10.11k stars 1.38k forks source link

`username` の大文字と小文字を区別するインスタンスで WebFinger リクエストに失敗する #10571

Open RShirohara opened 1 year ago

RShirohara commented 1 year ago

💡 Summary

username の大文字と小文字を区別する ActivityPub 実装 (e.g. cloudflare/wildebeest) では、WebFinger リクエスト内の resource クエリパラメータでも大文字と小文字が区別され、別のユーザとして扱われます。

1. 重複するユーザが存在しない場合 - [@RShirohara@ap.third-branches.net](https://ap.third-branches.net/@RShirohara) ![image](https://user-images.githubusercontent.com/47940764/230941877-6e20bade-135f-4c42-8602-d3a85ec1d5e3.png)
2. 重複するユーザが存在する場合 - [@test_foo@ap.third-branches.net](https://ap.third-branches.net/@test_foo) - [@Test_Foo@ap.third-branches.net](https://ap.third-branches.net/@Test_Foo) ![image](https://user-images.githubusercontent.com/47940764/230942030-824b7602-9ac6-4b0b-8c00-9c1675ebbaa0.png)

Misskey は WebFinger リクエストを生成する際に username を小文字へ正規化するため、上記のような ActivityPub 実装からはリモートユーザが取得できません。

🥰 Expected Behavior

username に大文字を含むリモートユーザの情報を Misskey UI 上で確認できます。

🤬 Actual Behavior

リモートユーザの username に大文字を含む場合、WebFinger リクエストが失敗します。

image
image

📝 Steps to Reproduce

  1. ブラウザを開き、https://<misskey-instance>/<@username@domain> の形式でリモートユーザの情報を取得する

📌 Environment

Additional Info

Mastodon などの殆どの実装で username の大文字と小文字を区別していない (mastodon/mastodon#7658) ことは理解していますが、明確な仕様として定義された文章を確認できませんでした。

syuilo commented 1 year ago

区別するインスタンスはサポートしないで良いかも

mei23 commented 1 year ago

区別するインスタンスはサポートしないで良いかも

大文字と小文字を区別して一意性制約とするデータベースと 大文字と小文字を区別せずに一意性制約とするデータベースの同期など出来ないから それでいいというかそうせざるを得ないと思うわ。

saschanaz commented 1 year ago

WebFinger リクエストを生成する際に username を小文字へ正規化するため

これしなかったらどうなりますか?

mei23 commented 1 year ago

これしなかったらどうなりますか?

相手側に大文字小文字違いの重複ユーザーがいなかったら、いちおう取得(&認識)できると思うのだわ。 ただし、相手側に大文字小文字違いの重複ユーザーがいた場合は 結局重複している方のユーザーはDBにINSERT出来なくて存在しないことにされると思うのだわ。

saschanaz commented 1 year ago

つまりなくても何かが新しく壊れることはないと

mei23 commented 1 year ago

つまりなくても何かが新しく壊れることはないと

大文字小文字違いの重複ユーザーがいない場合のみうまく動くようになるが それ以外の場合は動作不定になるのでどちらかがベターかは私には判断できないわ

saschanaz commented 1 year ago

それ以外の場合は動作不定になる

二つのノートのactorが大文字小文字違いの重複ユーザーだったらいまでも動作不定になりそうですがどうでしょう

mei23 commented 1 year ago

二つのノートのactorが大文字小文字違いの重複ユーザーだったらいまでも動作不定になりそうですがどうでしょう

確かにidの方はスキーマ上はcase sensitiveだわね。 かと言ってusernameの方をcase sensitiveに寄せられないし、めんどくさいわね。

mei23 commented 1 year ago

確かに、WebFingerでlowercaseを使う理由は特にない。 lowercaseを使わないようにすれば、このIssueの問題である「WebFinger リクエストに失敗する」は解決する。 (その解決されたユーザーがDBにINSERT出来て認識出来るかどうかは保証できない) ではあるわね。