oauth... КАК!?!?

Горбушка

Ищу её...
Регистрация
2 Май 2008
Сообщения
3.444
Реакции
2.523
Всем привет...

Встала задача - нужно авторизоваться в Jira через OAuth из php...
Еб...ь вторые сутки...

Собственно вопрос - есть хоть один пример как сделать OAuth с нуля?
Всё, что находил - тянет за собой кучу зависимостей, вплоть до Симфони, Лавервел и всего остального... Мне оно в проекте совмем не надо )
А что самое весёлое - ни один из найденных мной вариантов так и не заработал - либо композер не находит зависимсти, либо не поддерживает сертификаты, либо ещё чего...

Просто уже орать матом хочу!!!

В общем, поделитесь простым клиентом, а ещё лучше маном как написать свой.
 

borodatych

Постоялец
Регистрация
24 Июн 2016
Сообщения
159
Реакции
104

Горбушка

Ищу её...
Регистрация
2 Май 2008
Сообщения
3.444
Реакции
2.523
@borodatych - именно PECL в итоге и поставил. Хотел с самого начала, но чёт Docker не хотел его подключать.
Оказалось для Docker надо делать так в Dockerfile в секции RUN:
Код:
pecl install oauth && docker-php-ext-enable oauth
Ну а дальше в 10 строчек решил все свои проблемы.

Осталось разобраться как ему POST отправлять и всё в шоколаде (ещё не смотрел просто :) ).

Честно говоря не понимаю зачем городить огород с Laravel в зависимостях (да, да, целиком весь Laravel ради OAuth), когда всё реально в 10 строк решается... Вот только этих решений в интернете найти - ппц... Собирал из 10 кодов в итоге..

Что я делаю не так?..

PHP:
    $consume = new OAuth('123', '123', OAUTH_SIG_METHOD_RSASHA1);
    $consume->setRSACertificate(file_get_contents('../app/ssl/jira_privatekey.pem'));
    $consume->enableDebug();

    $consume->setNonce(md5(microtime(true) . uniqid('', true)));
    $consume->setTimestamp(time());

    $consume->setToken('oauth_token', 'oauth_token_secret');

    $data = array('name' => 'qwerty');

    var_dump($consume->fetch('https://.......ru/jira/rest/api/latest/issue/SD-123/assignee', $data, OAUTH_HTTP_METHOD_PUT));
    print_r(json_decode($consume->getLastResponse(), true));

Если делать GET - всё работает. если PUT - ошибка signature_invalid
 
Последнее редактирование модератором:
  • Нравится
Реакции: Nei

borodatych

Постоялец
Регистрация
24 Июн 2016
Сообщения
159
Реакции
104
Хм, если честно не доводилось с oauth работать
И если довелось бы, то точно в рамках Laravel, да, мне он симпатичен))
Хотя навряд ли дело в нем!
Может та сторона put не принимает?
Я, если честно, разработал не один api сервис, и вот put нигде не обрабатывал
Да, читал, да стоит и неплохо, но нигде и ни разу, увы(
 

Горбушка

Ищу её...
Регистрация
2 Май 2008
Сообщения
3.444
Реакции
2.523
@borodatych я боюсь тащить весь Laravel ради рассылки "ты не списал часы по таску, с которым работал" - это передоз )
PUT в официальной доке описан, через curl с Basic авторизацией работает. А вот через OAuth - нет.

Завёл тикет в поддержке Atlassian, благо лицензия позволяет. Но чёт мне кажется с php они меня пошлют :(

Ощущаю себя реально тупым ) Что интересно - Atlassian уже неделю забивает на мой запрос :( Надо задуматься о целесообразности продления поддержки...

Если у кого есть идеи как это пофиксить - буду рад любым советам, даже пальцем в небо.
 
Последнее редактирование модератором:

Албибеков

Постоялец
Регистрация
24 Июн 2016
Сообщения
33
Реакции
31
  • Заблокирован
  • #6
PHP:
$api = new madmis\JiraApi\JiraApi('http://localhost:8080/', '/rest/api/2');

$auth = new madmis\JiraApi\Authentication\Basic('email@test.com', 'password');
$api->setAuthentication($auth);

Тут подробнее, авось то, что нужно
Скрытое содержимое доступно для зарегистрированных пользователей!
 

Горбушка

Ищу её...
Регистрация
2 Май 2008
Сообщения
3.444
Реакции
2.523
Это Basic, мне OAuth надо... С Basic проблем нету.

Причём опять же...
PHP:
    "require": {
        "php": ">=5.5.0",
        "guzzlehttp/psr7": "^1.2",
        "guzzlehttp/guzzle": "^6.2",
        "httplib/http": "^1.0",
        "jms/serializer": "^1.0",
        "symfony/options-resolver": "^2.7|^3.1"
    },
Вы упоротые, оно решается 3 функциями по 10 строчек каждая с обычным curl...
 

Den1xxx

Постоялец
Регистрация
15 Янв 2014
Сообщения
289
Реакции
167
Если делать GET - всё работает. если PUT - ошибка signature_invalid
Ну не такой распространенный метод PUT, может через POST попробуешь?
Важны также заголовки, если html ver 4 и ниже, так он просто не поддерживает PUT.
 
Последнее редактирование:
  • Нравится
Реакции: Nei

Nei

Nosce te ipsum
Команда форума
Модератор
Регистрация
5 Сен 2009
Сообщения
688
Реакции
603
+1 кстати, зачем именно PUT использовать, если с GET работает?
 

Горбушка

Ищу её...
Регистрация
2 Май 2008
Сообщения
3.444
Реакции
2.523
PUT нужно использовать потому что это REST API для Jira и нужный мне метод работает через PUT :(
Через GET этот же метод возвращает текущие значения, через PUT обновляет имеющиеся.
Через basic авторизацию собственно всё работает, но в этом случае надо хранить пароли пользователей, а это зло.

Кстати, поддержка Atlassian спустя 8 дней ответили - "мы не поддерживаем разработку под Jira, разбирайтесь сами".
 
Сверху