# Amaroqが2.0rc1以降のMastodonインスタンスで使えなくなる理由についての技術的な詳細 **追記: アップデートで使えるようになりました** まちがってたらごめんなさい まず、Mastodonにおいてクライアントがユーザーのアカウントを使ってなにかしたい時にはかならずOAuth認証をしなければならないのですが、MastodonでのOAuth認証には2つ方法があります。 1. Webブラウザ上で認証画面を開いてユーザーに認証ボタンを押してもらう方法(できる限りこの方法を使うべき) 2. ユーザーのメールアドレスとパスワードをPOSTして認証する方法 しかし、Mastodonの`2.`の実装に - メールアドレスやパスワードが正しくないとログイン画面にリダイレクトされる - ログイン中のセッションでPOSTするとメールアドレスやパスワードを付けていなくてもログイン中のアカウントのアクセストークンが取得できてしまう などの不具合がありました。 Amaroqはこの中の"ログイン中のセッションでPOSTするとメールアドレスやパスワードを付けていなくてもログイン中のアカウントのアクセストークンが取得できてしまう"不具合を利用していました。 具体的にAmaroqは、以下の方法で認証をするようです。 1. WebViewを開く 2. `/oauth/token`に前述の方法で認証を試みる(このリクエストはWebView内で送信されているので、もしユーザーがログイン済であったらCookieも一緒に送信される) 3. ユーザーがログイン済な場合は普通にリクエストが成功し、ログインしていない場合は**ログイン画面にリダイレクトされる**。 4. WebView内でリクエストを飛ばしているため、そのままログイン画面が表示される。 5. ユーザーがログインしたっぽかったら`2.`からやりなおす また、そもそもAmaroqのログイン完了判定には不具合があって、(今はどうか知りませんが)4月ごろのバージョンでは`friends.nico`などでの外部アカウントで認証できる機能を使おうとすると、別サービスのOAuth認証画面に推移したときにログインが完了したとして`2.`からやりなおされてしまう不具合がありました。 そしてこの不具合が[When OAuth password verification fails, return 401 instead of redirect by Gargron · Pull Request #5111 · tootsuite/mastodon](https://github.com/tootsuite/mastodon/pull/5111)でついに修正されました(といってもアップデートしていないインスタンスも一定以上存在するので、クライアントを開発する場合は(特定インスタンス専用のクライアントというわけでもなければ)パスワードやメールアドレスが違うとリダイレクトされる前の挙動にも対応しつづける必要があります。ここMastodonクライアント開発のつらいポイント。) しかし、この挙動を頼りにしていたAmaroqは、 1. `/oauth/token`叩くやで 2. リダイレクトされてないから成功したやろ 3. あれアクセストークン取得できへん 4. `1.`に戻る の繰り返しをするようになってしまって、結果ログインができなくなってしまいました。 このような理由から、AmaroqでMastodon2.0のインスタンスにログインできるようになるには時間がかかりそうです (と作者もトゥートしています<https://mastodon.social/@eurasierboy/98835177434030762>)。 PR: 私もiOS向けMastodonクライアントを開発してるので、よければ使ってみてください。<https://cinderella-project.github.io/iMast/>