#php #azure #azure-ad-b2c #public-key-encryption #phpseclib3
Вопрос:
Большинство примеров создания открытого ключа из модуля и экспоненты Azure B2C используют phpseclib и передают строку XML в библиотеку для создания открытого ключа.
Однако phpseclib3, похоже, переключает это, предоставляя PublicKeyLoader, который принимает массив с ключами, в котором ключи e и n для показателя и модуля являются экземплярами BigInteger.
Какие преобразования должны произойти со значениями e и n, предоставленными Azure B2C, чтобы сделать их подходящими для использования с PublicKeyLoader?
Многие примеры для более старых версий phpseclib будут преобразованы из base64url в base64, но я не знаю, является ли это исключительно в интересах метода преобразования XML и будет ли это работать с функцией BigInteger.
Генерация этого открытого ключа предназначена для проверки подписи маркера доступа с помощью lcobucci/jwt.
Ответ №1:
После небольшого экспериментирования и дальнейших поисков можно использовать следующий метод.
Преобразуйте каждое значение из base64url в base64 и декодируйте. Возможно, вы захотите использовать PHP-пакет spomky-labs/base64url.
Распакуйте значение из hex
$value = unpack('H*', $value);
затем преобразуйте в BigInteger, используя базу 16
new BigInteger($value[1], 16);
Единственное, что следует отметить, это то, что некоторые примеры декодирования Base64URL добавляют заполнение при подготовке к коду base64_decode. Цитируемая библиотека этого не делает, но у меня это сработало.