Misskey: MiAuthで対応インスタンスなどを検知するのが困難

Created on 29 Mar 2020  ·  26Comments  ·  Source: syuilo/misskey

Summary

MiAuth

  • インスタンスが存在しているか
  • MiAuth対応しているか
  • UUIDが重複しているか

などを検知する方法がないのでアプリの実装やトラブルシューティングが大変そう。

最悪、クライアントをURLに飛ばす前になんらかの通信があれば、その時点で検知できそうだけど
そういう通信もない。

https://github.com/syuilo/misskey/issues/5656#issuecomment-604889634

いちおう、一番最初にPOST /api/miauth/:使用予定のID/checkして

  • 404が返ってきた => 未対応インスタンス
  • { ok: false } が返ってきた => 対応インスタンスでそのIDは使用可能
  • { ok: true } が返ってきた => 対応インスタンスだけどそのIDは既に使用済み

で判定する裏技はありそうだけど…

✨Feature

Most helpful comment

featuresにmiauth: true追加しました

All 26 comments

時間が経てばアップデートするインスタンスも増えてくるので2番目の問題は解決できそう
3番目のUUIDの問題も重複はまずないと思うので大丈夫そう
万が一問題ありそうだったらサーバー(クライアント?)サイドでアプリ名+UUIDを結合した文字列をIDとして扱えば良さそう

時間が経てばアップデートするインスタンスも増えてくるので2番目の問題は解決できそう

結局misskey v10のやつは残るだろうし解決できなくない?

これからv10対応アプリが作られることはあるんだろうか

そもそもMisskey v12ですら全体の5〜7割ぐらいしか入ってないし先が長そうhttps://fediverse.network/misskey
image

これからv10対応アプリが作られることはあるんだろうか

v10のインスタンスにいる人なら作るかもしれない

普通にインスタンスのバージョン取得して判定するのではだめなのかしら

Mastodonでどうしてもそれやらないといけなくて実装したことあるけど面倒くさい

確かに面倒かもしれないけど「困難」「方法がない」ほどではない感じがする
ある機能がそのインスタンスで対応しているか検知しないといけないのはMiAuthに限った話ではないと思う

Misskey対応アプリを作るときはMiAuth関係なくやはり何らかのバージョンチェック処理は必要になると思う
その処理でバージョンが分かればMiAuth対応なのかどうかも分かる

何らかのバージョンチェック処理は必要になると思う

(いろいろなバージョンのMisskeyに対応するアプリを作る場合)

バージョンチェックで機能を判定しようとすると、アプリ開発者が機能と対応バージョンの情報を収集する必要がありハードルが高くなると思います。

また、アプリがバージョンチェックで機能を制限し始めると、旧バージョンインスタンスでバックポート等で機能を実装した場合にバージョンを偽装する羽目になります。

なにか、これが「あればMiAuth対応」みたいなAPIがあればいいかなと思います。
(今のところ POST /api/miauth/:使用予定のID/check を叩いてみるのが確実そうですが)

アプリ開発者が機能と対応バージョンの情報を収集する必要がありハードルが高くなる

旧バージョンインスタンスでバックポート等で機能を実装した場合にバージョンを偽装する羽目になる

なるほど

これが「あればMiAuth対応」みたいなAPIがあればいいかなと思います。

なにか考えてみます

既にあるインスタンスのメタ情報取得APIで、レスポンスに対応している機能一覧みたいなの含めるのが良いかも

既にあるインスタンスのメタ情報取得APIで、レスポンスに対応している機能一覧みたいなの含めるのが良いかも

それがこれだった気がします
https://github.com/syuilo/misskey/blob/09e3ddbd57d3e18b079619f00af533500d99770c/src/server/api/endpoints/meta.ts#L150-L163

それはサーバーごとにenable/disableされてる機能一覧なので、バージョン依存のものそこに入れるのはどうなんだろう

使われてないUUID返すAPIが一番いい気がする (UUID被り問題が解決できるため)

めいめいが言ったように古いバージョンでも特定の機能だけ自前で持ってきてるかもしれないので、機能はバージョン依存ではなさそう

UUID被り問題そこまで気にする必要あるんだろうか
APIリクエストの手間を減らすためにUUIDにしたので、それでは本末転倒感がある

どっちにしろ機能あるか確認するならAPIリクエストしないといけなくない?

APIリクエストするかしないかというより、APIリクエスト(手順)の数を減らしたい
手順が多いほどドキュメントも読みにくくなるし

指定のUUIDが重複しているかチェックするAPI
or
UUID生成して重複チェックして返してくれるAPI

を用意して、それを使うか使わないかは自由にするとか。

将来的にサードパーティアプリを無効にできるような機能が付く可能性があるなら
meta.features にフラグあってもいいかなと

featuresにmiauth: true追加しました

別issue案件だと思うけど、そうでなくても

  • ページ
  • ルーム
  • グループ
  • アンテナ
  • ハッシュタグタイムライン

といったバージョン依存な機能が使えるか簡単に判定できるよう、metaの拡張(あるいは機能一覧APIみたいなもの)があると嬉しいかも

featuresにmiauth: true追加しました

これで大丈夫そう?

Resolved by 02cc1891f21012f1e2527749bbacf054e6728cb0

Was this page helpful?
0 / 5 - 0 ratings

Related issues

AyaMorisawa picture AyaMorisawa  ·  3Comments

2vg picture 2vg  ·  3Comments

tamaina picture tamaina  ·  3Comments

CookieRamen picture CookieRamen  ·  3Comments

tamaina picture tamaina  ·  3Comments