Как сделать ClientID переменной в приложении MAUI Blazor MSAL?
Я пишу гибридное приложение MAUI Blazor, использующее MSAL для аутентификации с клиентом B2C. У меня он работает в нашей среде разработки с идентификатором ClientId приложения Azure B2C, который используется в двух местах.
Сначала создайте клиентский объект MSAL:
authenticationClient = PublicClientApplicationBuilder.Create(mauiAuthenticationConstants.ClientId)
.WithB2CAuthority(mauiAuthenticationConstants.AuthoritySignIn)
.WithTenantId(mauiAuthenticationConstants.TenantId)
.WithRedirectUri($"msal{mauiAuthenticationConstants.ClientId}://auth")
.WithClientId(mauiAuthenticationConstants.ClientId)
.Build();
А во-вторых, чтобы настроить намерение Android в манифесте:
<activity android:name="microsoft.identity.client.BrowserTabActivity" android:configChanges="orientation|screenSize" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="msal[**REPLACE THIS WITH THE CLIENT ID OF YOUR APP**]" android:host="auth" />
</intent-filter>
</activity>
У нас будут отдельные среды Azure для каждого из наших клиентов, поэтому приложение будет иметь разные идентификаторы клиентов в каждом из них.
Нам нужно иметь возможность разместить приложение в магазине Google, и после его загрузки пройти процесс инициализации, в ходе которого переменные B2C, включая идентификатор клиента, извлекаются из центральной базы данных и сохраняются в локальном безопасном хранилище.
Я вижу, как установить идентификатор клиента в коде, но как заменить идентификатор клиента в AndroidManifest.xml?
С уважением, Брайан
1 ответ
Я нашел ответ на этот вопрос.
По сути, вам нужно использовать собственный Uri перенаправления, который содержит глобально уникальную строку.
В Azure добавьте новый уникальный URI перенаправления в раздел приложений для мобильных и настольных компьютеров, используя схему формата://auth (например, com.contosa.app://auth).
Примечание! Мне пришлось подождать больше часа, чтобы это сохранить и распространить, поэтому я подумал, что это не работает!
В коде при создании PublicClientApplicationBuilder используйте
.WithRedirectUri("com.contosa.app://auth")
и добавьте это в AndroidManifest, используя:
<data android:scheme="com.contosa.app" android:host="auth" />
Затем идентификатор клиента отделяется от URL-адреса перенаправления, и теперь его можно назначать динамически во время выполнения.
С уважением Брайан