Question

J'essaie d'accéder à Swift avec curl en utilisant l'authentification basée sur Keystone (en suivant les Documentation sur l'API Keystone ici).

Chapitre 1:Récupération du jeton :

curl -d '{"auth": {"passwordCredentials": {
                     "username": "USERNAME", "password": "PASSWORD"}}}' \
     -H "Content-Type: application/json" \
     http://identity:35357/v2.0/tokens

Réponse:

{
  "access": {
    "token": {
      "expires": "2014-02-27T11:35:11Z", 
      "id": "TOKENID"
    }, 
    "serviceCatalog": [], 
    "user": {
      "username": "USERNAME", 
      "roles_links": [], 
      "id": "USERID", 
      "roles": [], 
      "name": "NAME"
    }
   }
}

Notez que contrairement à ce qui est dit dans le Documents sur l'API, les informations sur le locataire sont absentes de la réponse.


Chapitre 2:Authentification

curl -H "X-Auth-Token: TOKENID" http://swift/v1/AUTH_TENANTID/bucket

Réponse: 401 Unauthorized


Chapitre 3:Dépannage

Après avoir examiné l'intergiciel Keystone auth_token, j'ai constaté qu'il échouait lors de la tentative de récupération du locataire à partir des données du jeton :

def get_tenant_info():
    """Returns a (tenant_id, tenant_name) tuple from context."""
    def essex():
        """Essex puts the tenant ID and name on the token."""
        return (token['tenant']['id'], token['tenant']['name'])

    def pre_diablo():
        """Pre-diablo, Keystone only provided tenantId."""
         return (token['tenantId'], token['tenantId'])

    def default_tenant():
        """Pre-grizzly, assume the user's default tenant."""
        return (user['tenantId'], user['tenantName'])

    for method in [essex, pre_diablo, default_tenant]:
        try:
            return method()
        except KeyError:
             pass

    raise InvalidUserToken('Unable to determine tenancy.')

Puisqu'il n'y a aucune information sur le locataire dans les données du jeton, cela échoue toujours.Qu'est-ce que je pourrais faire de mal ?

Était-ce utile?

La solution

Cette réponse répond à votre question d'authentification initiale, mais pas au reste de la question...

Votre demande initiale :

curl -d '{"auth": {"passwordCredentials": {
                     "username": "USERNAME", "password": "PASSWORD"}}}' \
     -H "Content-Type: application/json" \
     http://identity:35357/v2.0/tokens

Doit fournir soit un tenantName ou tenantId attribut.Avec l'un ou l'autre de ces éléments fournis, votre réponse doit inclure à la fois les informations sur le locataire et un catalogue de services, pour rechercher d’autres points de terminaison de service.

Donc:

curl -d '{"auth": {"tenantName": "mytenant", "passwordCredentials": {
                         "username": "USERNAME", "password": "PASSWORD"}}}' \
         -H "Content-Type: application/json" \
         http://identity:35357/v2.0/tokens

Ce qui devrait vous donner quelque chose comme ceci :

{
  "access": {
    "metadata": {
      "roles": [
        "9fe2ff9ee4384b1894a90878d3e92bab",
        "0ecb6fccfd8546148cbb00b6d51364ce"
      ],
      "is_admin": 0
    },
    "user": {
      "name": "lars",
      "roles": [
        {
          "name": "_member_"
        },
        {
          "name": "admin"
        }
      ],
      "id": "436d522125584cf3a21ddcf628d59e2e",
      "roles_links": [],
      "username": "lars"
    },
    "serviceCatalog": [
      {
        "name": "nova",
        "type": "compute",
        "endpoints_links": [],
        "endpoints": [
          {
            "publicURL": "http://192.168.200.1:8774/v2/28a490a259974817b88ce490a74df8d2",
            "id": "264f2b4179ca4d6ca3a62b7347db11ce",
            "internalURL": "http://192.168.200.1:8774/v2/28a490a259974817b88ce490a74df8d2",
            "region": "RegionOne",
            "adminURL": "http://192.168.200.1:8774/v2/28a490a259974817b88ce490a74df8d2"
          }
        ]
      },
      .
      .
      .
    ],
    "token": {
      "tenant": {
        "name": "users/lars",
        "id": "28a490a259974817b88ce490a74df8d2",
        "enabled": true,
        "description": null
      },
      "id": "TOKENID",
      "expires": "2014-02-21T20:07:36Z",
      "issued_at": "2014-02-20T20:07:36.189044"
    }
  }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top