Azure MobileApp に Azure AD B2C のアカウントでサインインしてデータ同期する


Azure MobileApp に Azure AD B2C のアカウントでサインインしてデータ同期する

今回は前に取り上げた Azure B2C によるユーザ管理の外出しと同じく取り上げた Azure MobileApp によるユーザ個別データ管理の合わせ技、Azure B2C アカウントごとのユーザ個別データの同期方法についてまとめます。

モバイルアプリ側に AzureB2C サインイン機能を追加

Xamarin.Forms のAzureB2Cサインイン実装方法に関しては 公式ドキュメント を参照。

重要なのは、MobileServiceClient.LoginAsync() に AzureB2C から取得したアクセストークンを渡すとログイン画面を出さず、渡したトークンを使ってアクセスしてくれる事です。
MSALで取得したトークンを使いまわす事ができるので、MSALでログインした後 MobileApp へのログインでもう一度ログイン画面を出す~ というような事は必要ありません。

public async Task<bool> LoginAsync(string accessToken) {
    var payload = new JObject();
    payload["access_token"] = accessToken;

    var User = await CurrentClient.LoginAsync(
        MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory,
        payload);
    return true;
}

記事の最後にクイックスタートのTodoアプリの認証をB2Cログインに変更したもののソースを貼っておきます。

サーバ側変更

MobileApp の "認証/承認" で Azure Active Directory の認証プロバイダーを設定します。同じサブスクリプション上の Azure AD に登録されたアプリなら"簡易"から設定できますが、Azure B2C のアプリは対応していないので、"詳細"でクライアントIDと発行者URLを設定する事になります。

"詳細"での設定項目は上画像の通り。

あと今回はネイティブアプリからのサインインになるので、AzureB2C側に登録したアプリケーションの"ネイティブ クライアントを含める"もONにしておきましょう。

リソース