Azure AD B2C でサインインのみで開発した備忘録

投稿者: | 2022年11月9日

Azureの設定は下記サイトが一番参考になった

Azure Active Directory B2C でユーザー認証を超簡単に実装しよう

サインアップとサインインが誰でもできる前提であれば上記のサイトどおりに開発するだけで問題ありませんが、とある案件でサインアップは管理者のみだったので、その開発で詰まったところをまとめた

テナントとディレクトリの切り替え

テナントを作るとAzure右上のディレクトリ名が変わります(画像の赤色塗りつぶし部分)これがややこしくてテナントを選択した状態だとサブスクリプションが存在していない表記になり、一部のサービスが利用できなくなります。歯車マークからテナントを作ったディレクトリに選択しなおすと元に戻ります。

後述のシークレットIDの登録やAPI公開などのテナントの設定を変更するにはディレクトリの切り替えではなく、テナントを作成したディレクトリからテナントを選択して下記のリンクからジャンプする必要がある。はじめてAzure AD B2Cを使う人はかなり戸惑うと思う。

サーバーサイドのコード

サーバーサイドのコードは下記サイトが参考になった

C# から Microsoft Graph API を利用して Azure AD B2C にユーザーを登録するまで

詰まったところはMicrosoft.Graph.Authが非推奨になってサンプルコードを修正する必要が出た点。代わりにAzure.Identityを使います。参照先のサイトでClientCredentialProviderクラスを使っていたところを下記のようなコードに修正します。

ちなみにscopeは”https://graph.microsoft.com/.default”です。アプリケーション登録で作成されたurlではないです。

var graphClient = new GraphServiceClient(new DelegateAuthenticationProvider(async (requestMessage) => {

                // Retrieve an access token for Microsoft Graph (gets a fresh token if needed).
                var authResult = await client
                    .AcquireTokenForClient(scopes)
                    .ExecuteAsync();

                // Add the access token in the Authorization header of the API request.
                requestMessage.Headers.Authorization =
                    new AuthenticationHeaderValue("Bearer", authResult.AccessToken);
            })
            );

シークレットID

Azure Key Vault ではないです。アプリケーションの登録で作成したページ上で「証明書とシークレットID」を作成する必要があります。作成時にのみしか値が表示されないので注意。

APIのアクセス許可

サーバーサイドのコードを実行してみると下記のようなエラーにでくわす

Microsoft.Graph.ServiceException : Code: generalException
Message: An error occurred sending the request.

アクセス許可が必要なので下記からAPIの公開設定を調整します。

アクセス許可の追加を押すと右ペインに下記のようなページが表示されるはず

あとはアプリケーションの許可から下記のアクセスを許可します。

  • Directory,ReadWrite.All
  • User.Invite.All
  • User.ReadWrite.All

追加したアクセス許可の状態が✓マークでない場合は「管理者の同期を与えます」を実行して設定は完了。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)