5

我最近看到在 FIWARE Lab 中对 Cosmos 的 WebHDFS 的访问受到了 OAuth2 的保护。我知道我必须在请求中添加 OAuth2 令牌才能继续使用 WebHDFS,但是:

  • 我怎样才能得到令牌?
  • 令牌如何添加到请求中?

没有令牌,API 总是返回:

$ curl -X GET "http://cosmos.lab.fi-ware.org:14000/webhdfs/v1/user/gtorodelvalle?op=liststatus&user.name=gtorodelvalle"
Auth-token not found in request header
4

2 回答 2

3

是的,现在 WebHDFS 访问受 OAuth2 保护。这是在 FIWARE 中保护 REST API 的一般机制的一部分,它执行身份验证和授权。您可以在此处找到更多详细信息。

首先,您必须向 Cosmos 令牌生成器请求 OAuth2 令牌。这是一个运行在cosmos.lab.fiware.org:13000. 您可以使用任何 REST 客户端执行此操作,最简单的方法是使用 curl 命令:

$ curl -k -X POST "https://cosmos.lab.fiware.org:13000/cosmos-auth/v1/token" -H "Content-Type: application/x-www-form-urlencoded" -d "grant_type=password&username=frb@tid.es&password=xxxxxxxx"
{"access_token": "qjHPUcnW6leYAqr3Xw34DWLQlja0Ix", "token_type": "Bearer", "expires_in": 3600, "refresh_token": "V2Wlk7aFCnElKlW9BOmRzGhBtqgR2z"}

如您所见,负载中需要您的 FIWARE Lab 凭据,以基于密码的授权类型的形式。

一旦获得访问令牌(在上面的示例中,它是qjHPUcnW6leYAqr3Xw34DWLQlja0Ix),只需将其添加到您过去执行的同一个 WebHDFS 请求中。使用X-Auth-Token标头添加令牌:

$ curl -X GET "http://cosmos.lab.fiware.org:14000/webhdfs/v1/user/frb/path/to/the/data?op=liststatus&user.name=frb" -H "X-Auth-Token: qjHPUcnW6leYAqr3Xw34DWLQlja0Ix"
{"FileStatuses":{"FileStatus":[...]}}

如果您使用随机令牌尝试上述请求,服务器将返回令牌无效;那是因为您没有正确验证

$ curl -X GET "http://cosmos.lab.fiware.org:14000/webhdfs/v1/user/frb/path/tp/the/data?op=liststatus&user.name=frb" -H "X-Auth-Token: randomtoken93487345"
User token not authorized

同理,如果使用有效令牌但尝试访问另一个 HDFS 用户空间,您将得到相同的答案;那是因为您无权访问任何 HDFS 用户空间,但您拥有的用户空间:

$ curl -X GET "http://cosmos.lab.fiware.org:14000/webhdfs/v1/user/fgalan/path/tp/the/data?op=liststatus&user.name=fgalan" -H "X-Auth-Token: qjHPUcnW6leYAqr3Xw34DWLQlja0Ix"
User token not authorized

重要更新:

从 2016 年夏天开始,cosmos.lab.fiware.org不再工作。相反,一对集群,storage.cosmos.lab.fiware.orgcomputing.cosmos.lab.fiware.org已设置。Cosmos的认证服务器,目前运行在computing.cosmos.lab.fiware.orgTCP/13000端口。

于 2015-07-02T15:21:08.257 回答
1

正确的请求必须是:

curl -X POST " https://cosmos.lab.fi-ware.org:13000/cosmos-auth/v1/token " -H "Content-Type: application/x-www-form-urlencoded" -d "grant_type =password&username=user@domain.com&password=yourpassword" -k

网址不正确,正确的是https://cosmos.lab.fi-ware.org:13000

-k 用于关闭证书验证

于 2015-07-14T09:16:45.013 回答