Azure AD(v2.0)の認証をWPF(.NET Core)とASP.NET Core WebAPIで使用しようとしてハマった話
はじめに
下記の構成で構築しています。
一部Previewを使用していることもあり
参照されるタイミングによっては掲載するソースコードで動作しない可能性がありますので
ご注意くださいませ。
やりたいこと
基本そこまで難しいことはないというか、下記のドキュメントままなのですが
一部ハマったポイントがあるので備忘録的にメモを落としておきます。
1. AzureAD Application(v2.0)について
検証時点は個人アカウント(outlook)を使用するので👆画像を選択
この場合、ADアプリケーションのバージョンは強制的に2.0となります。
ここを設定しない場合は、Manifestの「accessTokenAcceptedVersion」を指定する必要があります。
2. トークン取得時に失敗する事象について
AuthenticationResult result = await _app.AcquireTokenInteractive(Scopes).ExecuteAsync();
アクセストークンの取得は上記の処理で行います。
しかし、このコードの実行の際に👇のエラーが発生しハマってしまいました。
AADSTS7000218: The request body must contain the following parameter: 'client_assertion' or 'client_secret'
暗黙フローを使用してトークンを取得するつもりだったので、シークレットを使用する余地もなく「?」な感じだったのですが
GitHubのIssueに同一のエラーが報告されていました。
ドキュメント曰く
Azure ADアプリケーションの「allowPublicClient」を「true」に変更すれば良いようです。
上記の設定を行うことで、認証とトークンの取得、トークンを使用したWebAPIへのアクセスが行えるようになりました。
最後に
今回作ってみたコードは下記となります。