2016-02-09 4 views
0

Я пытаюсь запросить веб-службы EJabberd REST с конечной точкой /api/connected_users, но запрос всегда возвращает мне 401 Несанкционированные ошибки HTTP.Ejabberd OAuth/REST 401 Неавторизованный

Вот моя конфигурация OAuth.

- 
port: 5280 
module: ejabberd_http 
request_handlers: 
    "/websocket": ejabberd_http_ws 
    # OAuth Support 
    "/oauth": ejabberd_oauth 
    # ReST API: 
    "/api": mod_http_api 
web_admin: true 
http_bind: true 
register: true 
captcha: false 

...  

commands_admin_access: configure 
commands: 
    - add_commands: user 
oauth_expire: 3600 
oauth_access: all 

Как объяснено в документации я использую следующий URL для создания OAuth 2 маркеров доступа для admin пользователя.

http://localhost:5280/oauth/authorization_token?response_type=token&client_id=myclient&redirect_uri=http://localhost:5280&scope=sasl_auth

Он возвращает мне мой OAuth токен.

http://localhost:5280/?access_token=oLn8Hebh051l2PdCM15tSvHrEI25CpBs&token_type=bearer&expires_in=3600&scope=sasl_auth&state=

Наконец просить api/connected_users конечной точки я делаю следующее.

curl -v -X GET -H "X-Admin: true" -H "Authorization: Bearer oLn8Hebh051l2PdCM15tSvHrEI25CpBs" http://localhost:5280/api/connected_users

Но он всегда возвращает меня 401 Несанкционированные ошибки.

В моем файле ejabberd.log у меня есть это.

2016-02-09 09:47:12.177 [info] <0.497.0>@ejabberd_listener:accept:333 (#Port<0.16419>) Accepted connection 127.0.0.1:62395 -> 127.0.0.1:5280 
2016-02-09 09:47:12.177 [debug] <0.546.0>@ejabberd_http:init:154 S: [{[<<"websocket">>],ejabberd_http_ws},{[<<"oauth">>],ejabberd_oauth},{[<<"api">>],mod_http_api},{[<<"register">>],mod_register_web},{[<<"admin">>],ejabberd_web_admin},{[<<"http-bind">>],mod_http_bind}] 
2016-02-09 09:47:12.177 [info] <0.546.0>@ejabberd_http:init:158 started: {gen_tcp,#Port<0.16419>} 
2016-02-09 09:47:12.177 [debug] <0.546.0>@ejabberd_http:process_header:281 (#Port<0.16419>) http query: 'GET' <<"/api/connected_users">> 
2016-02-09 09:47:12.177 [debug] <0.546.0>@ejabberd_http:process:353 [<<"api">>,<<"connected_users">>] matches [<<"api">>] 
2016-02-09 09:47:12.178 [info] <0.546.0>@mod_http_api:log:388 Admin call connected_users [] from 127.0.0.1:62395 

Так как настроить Ejabberd, чтобы позволить admin пользователю запрашивать все веб-службы Ejabberd REST?

Мои пользователи хранятся в Mysql, так как токены OAuth хранятся в Mnesia, может быть, проблема?

Спасибо,

Батист

+0

убедитесь, что вы включили модули, поддерживающие команды OAuth, в ejabberd.yml в разделе модуля. предоставить подробный журнал и конфигурацию модуля. –

+0

Привет Сунил и спасибо за ваш ответ, то, что вы указываете, написано в документах «модули, поддерживающие команды OAuth, которые вы хотите использовать», но это единственная инструкция для модулей и OAuth/REST, которые я нашел. Так что же это за «модули, поддерживающие команды OAuth»? Я не понимаю, что мне нужно делать, в разделе конфигурации документов http://docs.ejabberd.im/admin/guide/configuration их нет ничего о модуле «OAuth» или «REST». Не могли бы вы объяснить мне, какие модули добавить в раздел «модули»? (Я добавил «mod_http_api», но все еще сталкиваюсь с ошибками авторизации). –

+0

@BaptisteGaillard вы решили это как-то? У меня такая же проблема –

ответ

0

Убедитесь, что вы используете @host при вводе имени пользователя, если он указан в этом пути в ejabberd.yml. Я не получал никакого ответа от запросов REST, потому что я использовал только администратора для пользователя, когда должен быть admin @ somehost в имени пользователя.

Пожалуйста, дайте мне знать, если это не поможет.

0

убедитесь, что вы вводите правильный пользователь (JID): (Пользователь (JID): пользователь @ имя хоста)

он работал для меня.