0

我在 Keyrock 中注册了两个用户(全球 fiware labs 实例位于https://account.lab.fiware.org

  • 用户 Robin 有一个组织 Robin-Cloud
  • 用户 Robin 是应用程序 Babbler 的所有者
  • 应用程序 Babbler 已授权用户“Robin”和“Robin viewer”(见截图)
  • 用户“Robin viewer”与用户“Robin”是同一组织的成员
  • 只是为了确保我授权了“Robin viewer”所属的整个组织。
  • 两个用户具有相同的角色。

Keyrock 中的应用程序定义

我可以使用 shell 脚本对用户“Robin”进行身份验证以获取访问令牌。在 shell 脚本中,我传入应用程序客户端 ID 和客户端密码。我还传入了用户“Robin”的用户名和密码。外壳脚本在这里(此https://raw.githubusercontent.com/Bitergia/fiware-chanchan-docker/master/images/pep-wilma/4.3.0/auth-token.sh的更改副本):

#!/bin/bash

if [ $# -lt 2 ] ; then
    echo "auth-token: missing parameters."
    echo "Usage: auth-token <user-email> <password>"
    exit 1
fi

# Retrieve X-Auth-Token to make request against the protected resource

function get_token () {

    if [ $# -lt 2 ] ; then
    echo "get_token: missing parameters."
    echo "Usage: get_token <user-email> <password>"
    exit 1
    fi

    local _user=$1
    local _pass=$2

    # Retrieve Client ID and client Secret Automatically

    CLIENT_ID="e2c095aa42414e75b9ac4d760f4c625a"
    CLIENT_SECRET="****"

    # Generate the Authentication Header for the request

    AUTH_HEADER="$(echo -n ${CLIENT_ID}:${CLIENT_SECRET} | base64)"

    # Define headers

    CONTENT_TYPE="\"Content-Type: application/x-www-form-urlencoded\""
    AUTH_BASIC="\"Authorization: Basic ${AUTH_HEADER}\""

    # Define data to send

    DATA="'grant_type=password&username=${_user}&password=${_pass}&client_id=${CLIENT_ID}&client_secret=${CLIENT_SECRET}'"

    # Create the request

    REQUEST="curl -s --insecure -i --header ${AUTH_BASIC} --header ${CONTENT_TYPE} -X POST https://account.lab.fiware.org/oauth2/token -d ${DATA}"
    XAUTH_TOKEN="$(eval ${REQUEST})"
    echo "Request: ${REQUEST}"
    echo "X-Auth-Token for '${_user}': ${XAUTH_TOKEN}"

}

get_token $1 $2

然而

我无法获得用户“Robin 查看器”的访问令牌。我从 Keyrock 得到的信息是:

{"error": {"message": "The request you have made requires authentication.", "code": 401, "title": "Unauthorized"}}

我假设在 Keyrock 用户界面中为 Babbler 应用程序授权用户“Robin 查看器”就足够了。我在这里想念什么?

4

1 回答 1

0

似乎该/oauth2/token?grant_type=password组合仅适用于资源所有者,这正是我所看到的。

因此,我们似乎仅限于通过以下方式请求访问令牌: /oauth2/authorize?response_type=token&client_id=....&redirect_uri=....

这迫使我们通过 Horizo​​n 前端的 Web 登录屏幕。我们正在从智能手机开始登录流程,因此这远非理想,因为 Horizo​​n 屏幕根本没有响应:(

[编辑]

该错误似乎是由于电子邮件地址中的特殊字符未编码(我们有一个加号,因为 gmail 忽略了加号之后的任何内容,允许我们创建多个电子邮件地址并仍然通过真实的电子邮件地址接收它们:例如用户名+test@gmail.com 到达 username@gmail.com)。

所以我们的问题似乎已经消失了(或者也许全球固件实例上的最新 Keyrock 更新为我们解决了这个问题?)。毕竟我们现在可以使用 /oauth2/token?grant_type=password 了。

于 2016-01-05T21:59:24.523 回答