Ejabberd OAuth / REST 401未经授权

时间:2016-02-09 08:52:40

标签: api rest oauth ejabberd

我正在尝试使用/api/connected_users端点请求Ejabberd REST Web服务,但请求始终返回401 Unauthorized HTTP错误。

这是我的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为admin用户生成OAuth 2访问令牌。

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 Unauthorized错误。

在我的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 Web服务?

我的用户存储在Mysql中,因为OAuth令牌存储在Mnesia中可能是问题吗?

谢谢,

巴普蒂斯特

2 个答案:

答案 0 :(得分:1)

如果在ejabberd.yml中以这种方式指定了用户名,请确保使用@host。我没有收到REST请求的任何响应,因为我只使用admin作为用户,什么时候应该是admin @ somehost用户名。

如果这没有帮助,请告诉我。

答案 1 :(得分:1)

确保输入正确的用户(jid):(用户(jid):user @ hostname)

它对我有用。