Вы можете использовать схему аутентификации с открытым ключом.
Создайте пару ключей с открытым и закрытым ключом (используя Java keytool, GNU GPG или похожий инструмент). Используйте закрытый ключ, чтобы подписать часть информации (например, имя пользователя) в приложении A и создать ссылку на приложение B, которая доступна из приложения A и содержит подписанные данные. Затем приложение B может войти в систему пользователя после проверки с помощью открытого ключа, что запрос действительно поступил из приложения A (которое оно должно иметь, если оно может расшифровать строку).
Вы, конечно, могли бы создать противоположную пару ключей для навигации и другим способом, или вы могли бы просто использовать открытый ключ и хранить его в секрете (фактически делая его разделяемой секретной системой).
Если пользователь пытается получить доступ к приложению B напрямую, вы также можете перенаправить его в приложение A с параметром, который говорит, что он пришел из приложения B (или выполнить проверку реферера). Если он уже вошел в приложение A, создайте ссылку с подписанными данными и перенаправьте на нее, в противном случае предоставьте ему экран входа в систему и перенаправьте после входа в систему.
Надеюсь, это поможет!