Аутентичность Worklight
Мы разрабатываем гибридное приложение для Worklight, и нам необходимо реализовать аутентификацию приложения. Мы используем Worklight Enterprise edition 6.2.0.1 с центром приложений IBM. Тем не менее, мы видим следующую ошибку в журнале сервера при запуске приложения на Android (iOs тоже самое, но предоставит журнал Android).
[1/19/15 15:25:05:388 EST] 00000254 WLNewAuthenti E com.worklight.core.auth.ext.appauth.WLNewAuthenticityScheme isInvalidAndroidParams FWLSE0260E: Отсутствует или пустой packageName для проверки подлинности Android, не может проверить подлинность Android. Если для проверки подлинности приложения не задано значение "Отключено" или "Включено, обслуживание" в Worklight Console, запрос не будет выполнен. [project MobileApp] [19.01.15, 15:25:05:388 EST] 00000254 WLNewAuthenti E com.worklight.core.auth.ext.appauth.WLNewAuthenticityScheme isInvalidAndroidParams FWLSE0260E: Отсутствует или пуста проверка подлинности открытого ключа подписи, андроида, Если для проверки подлинности приложения не задано значение "Отключено" или "Включено, обслуживание" в Worklight Console, запрос не будет выполнен. [проект MobileBanking].
Тест безопасности для authenticationConfig.xml:
<securityTests>
<mobileSecurityTest name="MobileAppTestMobile">
<testAppAuthenticity/>
<testDeviceId provisioningType="auto" />
<testUser realm="MobileAppRealm" />
<testDirectUpdate mode="perSession" />
</mobileSecurityTest>
<webSecurityTest name="MobileAppTest">
<testUser realm="MobileAppRealm" />
</webSecurityTest>
<customSecurityTest name="SubscribeServlet">
<test realm="SubscribeServlet" isInternalUserID="true"/>
</customSecurityTest>
</securityTests>
Приложение-descriptor.xml:
<iphone bundleId="ca.company.MobileApp" securityTest="MobileAppTestMobile" version="1.0">
<worklightSettings include="false"/>
<security>
<encryptWebResources enabled="true"/>
<testWebResourcesChecksum enabled="true" ignoreFileExtensions="png, jpg, jpeg, gif, mp4, mp3"/>
</security>
</iphone>
<android securityTest="MobileAppTestMobile" version="1.0">
<worklightSettings include="false"/>
<security>
<encryptWebResources enabled="true"/>
<testWebResourcesChecksum enabled="true" ignoreFileExtensions="png, jpg, jpeg, gif, mp4, mp3"/>
<publicSigningKey>"We have added our public signing key here by extracting it from our keystore file"</publicSigningKey>
</security>
</android>
Мы развернули все приложение с нуля после обновления файла WAR. Консоль Worklight отображает три значения для аутентичности "Отключено - Включено, Обслуживание - Включено, Блокировка"
Когда мы ставим "Включено, Блокировка" или "Включено, обслуживание", мы получаем журнал ошибок на сервере, который размещен в верхней части сообщения. На экране приложения появляется сообщение об ошибке "При обработке запроса из приложения произошла ошибка".
Пожалуйста, порекомендуйте. Спасибо
2 ответа
Проблема была исправлена.
Решение:
1- мы изменили MobileSecurityTest в authenticationConfig.xml, чтобы он был customSecurityTest, как показано ниже, и повторно развернули файл WAR:
<customSecurityTest name="MobileSecurityTest">
<test realm="wl_antiXSRFRealm" step="1"/>
<test realm="wl_authenticityRealm" step="1"/>
<test realm="wl_remoteDisableRealm" step="1"/>
<test realm="wl_directUpdateRealm" mode="perSession" step="1"/>
<test realm="wl_anonymousUserRealm" isInternalUserID="true" step="1"/>
<test realm="wl_deviceNoProvisioningRealm" isInternalDeviceID="true" step="2"/>
</customSecurityTest>
2- В application-descriptor.xml:
Для андроида я использовал то, что сказал Идан о добавлении <packageName>
имущество.
<android securityTest="MobileSecurityTest" version="1.0">
<worklightSettings include="false"/>
<security>
<encryptWebResources enabled="true"/>
<testWebResourcesChecksum enabled="true" ignoreFileExtensions="png, jpg, jpeg, gif, mp4, mp3"/>
<publicSigningKey>"Our public signing Key placed here"</publicSigningKey>
<packageName>ca.company.MobileTest</packageName>
</security>
</android>
Для iOS проблема была в applicationId, мы думали, что значение applicationId является последним разделом bundleId,
Например: если bundleId - это "com.company.Myapp", это означает, что applicationaiotnId - это "Myapp", что неверно.
Это неверное определение:
<iphone bundleId="ca.company.MobileTestiPhone" applicationId="MobileTestiPhone" securityTest="MobileSecurityTest" version="1.0" >
ApplicationId - это значение в файле worklight.plist, который находится внутри собственной папки iPhone или iPad, и этот файл создается после выполнения сборки. И для нашего приложения это имеет совершенно другое значение.
Правильный был:
<iphone bundleId="ca.company.MobileTestiPhone" applicationId="MobileTest" securityTest="MobileSecurityTest" version="1.0" >
Вот почему приложение блокировалось с нашего сервера WL, когда мы установили значение аутентификации приложения "Включить, блокировка".
Спасибо @Idan за вашу помощь.
Согласно сообщению об ошибке, вам не хватает имени пакета Android (в application-descriptor.xml).
Это учебник по аутентичности для гибридных приложений для v6.3, но то же самое для 6.2. Из инструкции Android:
Возьмите значение имени пакета приложения из атрибута пакета узла манифеста в AndroidManifest.xml. Если вы решите изменить значение на другое, убедитесь, что вы изменили его в обоих местах. Вы также можете напрямую отредактировать application-descriptor.xml и добавить packageName:
<android version="1.0"> <worklightSettings include="false"/> <security> <encryptWebResources enabled="false"/> <testWebResourcesChecksum enabled="false" ignoreFileExtensions="png, jpg, jpeg, gif, mp4, mp3"/> <publicSigningKey>MIGff ...</publicSigningKey> <packageName>com.MyBankApp</packageName> </security> </android>