Visual Studio 2022 (17.2)に更新したあたりからVisual Studio起動するたびに(裏でこっそり)認証ウィンドウが表示されるようになってしまいました。(※おそらく17.2は冤罪。リフレッシュトークンの期限が切れたとかそういう話な気がする)
普通はまぁ再認証必要なのねとか思って認証して終わり、なんですが、自分の環境はなぜか何度認証しても起動のたびに出てきてめっちゃストレスでした。一応解決したので内容のシェアと至るまでの愚痴みたいなエントリ残しておきます。
Workaround
- %LOCALAPPDATA%\Packages\Microsoft.AAD.BrokerPlugin_cw5n1h2txyewyフォルダの中身を削除する
- Authentication automatically fails in Office 365 services – Office 365 | Microsoft Docs … この手順を試す(こっちは未確認)
原因
根本原因はサインインしてるユーザー(自分はMicrosoftアカウントを使用)がアクセスできるAzure ADテナント(※以前招待されたテナント)で権限がなくなったがそこを参照しにいってエラーになってる ⇒ 認証しても毎回エラーになる、みたいな感じです。
なんでそう思ったのかというと画面上はエラーなどは出ない(認証成功して終わったように思える)けどバックグラウンドではエラーが応答されてたようなので。
{‘error’:’invalid_grant’,’error_description’:’AADSTS50020: User account ‘{EmailHidden}’ from identity provider ‘live.com’ does not exist in tenant ‘権限のないテナント’ and cannot access the application ‘872cd9fa-d31f-45e0-9eab-6e460a02d1f1′(Visual Studio) in that tenant. The account needs to be added as an external user in the tenant first. Sign out and sign in again with a different Azure Active Directory user account.\\r\\n’,’error_uri’:’https://login.microsoftonline.com/error?code=50020′}
なるほどね~とか思いながらとりあえずVisual Studio上でサインインしてるアカウント(Visual StudioプロファイルのIDや、Azure関連のアカウント設定部分)をサインアウトしてみたりしても状況は変わらず。どうもVisual Studioが認証を要求してるのは間違いないんですがVisual Studio上のアカウントの設定ではなさそうでした。
なんで~?とか思いながら認証ウィンドウよく見てみると、 C:\Windows\SystemApps\Microsoft.AAD.BrokerPlugin_cw5n1h2txyewy\Microsoft.AAD.BrokerPlugin.exe がsvchost.exe配下で起動されてました。Windows 10あたりで追加されたモダン認証用のモジュールか~。なるほどVisual StudioさんはOSの仕組みを使って認証してたんですね(起動時に何を見る必要があるのかちょっと謎ですけど)。
というわけで原因のプロセスがわかったので、そのプロセスのワーキングディレクトリを見ると上述の %localappdata% 以下のファイルだったというわけでした。
リクエストエラーのPostデータ見る限りリフレッシュトークン投げてたのでとりあえずキャッシュ消すか~と思って上述のフォルダの中身を綺麗にしたら無事再認証後、正常な状態に戻ったという感じです。
あとで見つけた、そういう場合のFix手段を試してもいいかもですね。
まとめ
不幸な事故から数少ない教訓を得るとしたら以下のような感じでしょうか。
- 安易にMicrosoftアカウントでAzure ADテナントに参加してはいけない。招待される場合は注意しよう。
- 用が済んだテナントはさっさと脱退すべき。セルフ脱退できない場合は管理者に連絡がつく間にアカウント消してもらおう。
まぁ気持ちの悪い原因はわかってスッキリしたのでよかったです。納得はできてないところあるけど()
追記 (2022.07.13)
Visual Studio 2022 (17.2.6) で直ったようです。
Removed authorization telemetry that was in some cases causing Visual Studio to show meaningless OS sign-in dialog during launch.