Visual Studio 2022 起動時に認証ウィンドウが表示される件

Visual Studio 2022 (17.2)に更新したあたりからVisual Studio起動するたびに(裏でこっそり)認証ウィンドウが表示されるようになってしまいました。(※おそらく17.2は冤罪。リフレッシュトークンの期限が切れたとかそういう話な気がする)
普通はまぁ再認証必要なのねとか思って認証して終わり、なんですが、自分の環境はなぜか何度認証しても起動のたびに出てきてめっちゃストレスでした。一応解決したので内容のシェアと至るまでの愚痴みたいなエントリ残しておきます。

Workaround

原因

根本原因はサインインしてるユーザー(自分は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テナントに参加してはいけない。招待される場合は注意しよう。
  • 用が済んだテナントはさっさと脱退すべき。セルフ脱退できない場合は管理者に連絡がつく間にアカウント消してもらおう。

まぁ気持ちの悪い原因はわかってスッキリしたのでよかったです。納得はできてないところあるけど()

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中