Я знаю, что API-интерфейсы REST часто используются и очень важны для веба, но в основном я когда-либо делал только автономные приложения для настольных компьютеров (подумайте, разработчик однопользовательской игры). В последнее время я провел много исследований и нашел концепцию REST простой, но мой текущий проект - мой первый раз, когда я использую REST API или криптографию в любом значимом качестве. Поэтому, если я скажу что-нибудь глупое, пожалуйста, потерпите меня.
В моем текущем проекте я пытаюсь отправить электронное письмо из моего приложения Unity3D с помощью API GEST REST Google Cloud Platform (GCP). Я обнаружил в своей первоначальной реализации с использованием клиентских библиотек Google (которые они рекомендуют использовать разработчикам - и не без причины), что клиентские библиотеки Google создают искаженные REST-запросы при использовании в контексте Unity3D (почему это остается TBD).
В результате я пытаюсь выполнить все свое взаимодействие с GCP с помощью необработанных запросов REST (через HTTP). Я создал Json веб-токен, как указано здесь (лучшая ссылка, которую я нашел).
Токен имеет заголовок (как описано в статье выше) и Исковые требования установлены (также в статье). Мне также удалось сгенерировать подпись, но я почти уверен, что моя подпись неверна - потому что я создаю подпись, никогда не загружая учетные данные своей учетной записи службы из файла учетных данных JSON, который я загрузил с панели управления GCP .
Мой главный вопрос «Как мне это сделать»:
Подпишите представление UTF-8 для ввода с помощью SHA256withRSA (также известного как RSASSA-PKCS1-V1_5-SIGN с функцией SHA-256 ha sh) с закрытым ключом, полученным из консоли API Google. Выходными данными будет байтовый массив.
in C#? В настоящее время у меня есть представление UTF-8, хранящееся в виде байта [] с именем «InputBuffer», но мне очень трудно понять, как подписать InputBuffer с помощью закрытого ключа. Может ли кто-нибудь дать пример с объяснением? или предоставить ссылку на такое? (Я думаю, что я нашел одну ссылку во всем моем поиске, но забыл добавить ее в закладки и в итоге потерял ее. (Правка: нашел ее здесь , хотя это пример Python, использующий jwt.encode, Я пытаюсь преднамеренно изобретать колесо здесь, в C#, чтобы обойти ошибки Библиотеки Google, поскольку Unity не является поддерживаемой платформой.)
В какой форме мне нужно получить закрытый ключ ? Byte []? String? ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Это для производственного проекта, поэтому мне нужно убедиться, что я правильно понимаю и что моя реализация безопасна. Какие ошибки мне следует остерегаться?
РЕДАКТИРОВАТЬ: Найдено этот вопрос SO , который, по сути, заключает в себе то, что я пытаюсь сделать, однако SOUser Hans. Z указывает, что он уязвим для атаки безопасности. Я пытаюсь сделать то же самое, что и автор предыдущего вопроса , но делай это правильно.