Невозможно создать SingleAccountPublicClientApplication для Azure AD на Android - PullRequest
2 голосов
/ 08 ноября 2019

В соответствии с инструкциями на https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-v2-android я сгенерировал хэш подписи разработки с помощью KeyTool и зарегистрировал свое приложение на портале Azure.

Портал сгенерировал конфигурацию MSAL, которую я затем вставил в res.raw.auth_config. json в проекте (my-app-client-id и имя пакета my-app просто заполнители в приведенном ниже примере; фактические значения были автоматически сгенерированы Azure):

{
  "client_id" : "<my-app-client-id>",
  "authorization_user_agent" : "DEFAULT",
  "redirect_uri" : "msauth://<my-app's package name>/npYKnQBHywGAasZflTy2xmdpEiU%3D",
  "authorities" : [
    {
      "type": "AAD",
      "audience": {
        "type": "AzureADMultipleOrgs",
        "tenant_id": "organizations"
      }
    }
  ]
}

Затем я добавилпосле AndroidManifest.xml:

<application>
[..]
        <!--Intent filter to catch Microsoft's callback after Sign In-->
        <activity
            android:name="com.microsoft.identity.client.BrowserTabActivity">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE"/>

                <!--
                    Add in your scheme/host from registered redirect URI
                    note that the leading "/" is required for android:path
                -->
                <data
                    android:scheme="msauth"
                    android:host=""
                    android:path="/<signature-generated-by-keytool>" />
            </intent-filter>
        </activity>
[...]
</application>

В onCreate () моей деятельности я пытаюсь создать клиентское приложение для одной учетной записи следующим образом:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_single_account_model);
        initializeUI();

        PublicClientApplication.createSingleAccountPublicClientApplication(this,
            R.raw.auth_config,
            new IPublicClientApplication.ISingleAccountApplicationCreatedListener() {
                @Override
                public void onCreated(ISingleAccountPublicClientApplication application) {
                    mSingleAccountApp = application;
                    loadAccount();
                }

                @Override
                public void onError(MsalException exception) {
                    displayError(exception);
                }
            });
}

К сожалению, PublicClientApplication.createSingleAccountPublicClientApplication () вызов вызывает сбой приложения со следующей ошибкой:

java.lang.IllegalStateException: URI перенаправления в файле конфигурации не совпадает с URI, созданным с именем пакета и хэшем подписи. Проверьте URI в файле конфигурации и регистрацию вашего приложения на портале Azure.

Я не могу понять, почему это происходит, поскольку содержимое файла конфигурации было создано порталом Azure, а имя пакета, подписьхэш и URI перенаправления соответствуют любому показанному на портале.

Буду признателен за любые предложения.

1 Ответ

1 голос
/ 08 ноября 2019

Вкратце: это, вероятно, проблема с вашим хранилищем ключей отладки. Недавно у меня возникла такая же проблема, и в конечном итоге она стала проблемой, когда я создавал хеш в командной строке с их инструкциями. Для меня это решило повторную процедуру регистрации приложения на портале Azure, и когда вы создаете хеш в командной строке, обязательно используйте пароль для хранилища ключей Android (по умолчанию «android»). В первый раз, когда я сделал это, я использовал пароль по умолчанию для хранилища ключей jdk, и он все еще создавал для меня хеш, но это приводило к описанной вами ошибке. Я не совсем уверен, как работает весь процесс, и хотел бы, чтобы другой человек разъяснил, но то, что я описал выше, решило проблему для меня.

...