ehealth-ua / api-spec

Apache License 2.0
30 stars 24 forks source link

DEMO: Возвращаются invalid или expired access_token при обмене Code Grant на Access Token #548

Closed oceanvibes closed 6 years ago

oceanvibes commented 6 years ago

Steps to Reproduce

Response:

{
    "meta": {
        "url": "http://api-svc.mithril/oauth/tokens",
        "type": "object",
        "request_id": "783dfcf0-c0a1-46f2-80c8-5b90efbb9b1e#26096",
        "code": 201
    },
    "data": {
        "value": "Z0JXcS9iQ04zYUl4YWRXcmJzY0IvZz09",
        "user_id": "4144bf81-2a7e-41da-8b9d-a75b616acb25",
        "name": "access_token",
        "id": "404f8e16-bf6d-4578-9700-b2cae95315e0",
        "expires_at": 1535452735,
        "details": {
            "scope": "client:read declaration:read declaration_request:approve declaration_request:read declaration_request:reject declaration_request:write division:activate division:deactivate division:details division:read division:write employee:deactivate employee:details employee:read employee:write employee_request:approve employee_request:read employee_request:reject employee_request:write legal_entity:read otp:read otp:write person:read secret:refresh",
            "refresh_token": "bklsWnVVSytUeTcxZUptRUoxelREQT09",
            "redirect_uri": "https://ehealth.lakmus.org",
            "grant_type": "authorization_code",
            "client_id": "e15c0762-7eda-425c-a224-362014db350c"
        }
    }
}

Для дальнейшего запроса (например GET divisions) используем access_token (data->value из ответа выше) в заголовке запроса: Authorization: Bearer Z0JXcS9iQ04zYUl4YWRXcmJzY0IvZz09

В ответе получаем ошибку:

{
    "meta": {
        "url": "http://api.demo.asclepius.com.ua:8000/api/divisions",
        "code": 401,
        "request_id": "783dfcf0-c0a1-46f2-80c8-5b90efbb9b1e#26110",
        "type": "object"
    },
    "error": {
        "message": "Invalid access token",
        "type": "access_denied"
    }
}

При этом заметили что при обмене code grant на access_token в параметре expires_at указана дата в прошлом (если это UNIX timestamp). Судя по всему токены выдаются с истёкшим сроком действия.

oceanvibes commented 6 years ago

Когда ждать ответ?

danakonovalenko commented 6 years ago

З токеном все гаразд, він діє до Tuesday, August 28, 2018 10:38:55 AM. Така помилка також може бути коли не передавався api-key. Можете перевірити чи в api call передавався api-key.

oceanvibes commented 6 years ago

Дякую за відповідь. api-key дійсно в заголовку не передавали. Передали - все працює.

oceanvibes commented 6 years ago

Тільки тепер не створюються devisions:

Request Headers:

Authorization: Bearer amg2OXlTbVNoZEo2SEk3dU1VVFBpUT09
Content-Type: application/json
api-key: 9cea483e5eb8af18a598

Request Body:

{
  "name": "Бориспільське відділення Клініки Ноунейм",
  "addresses": [
    {
      "type": "RESIDENCE",
      "country": "UA",
      "area": "Житомирська",
      "region": "Бердичівський",
      "settlement": "Київ",
      "settlement_type": "CITY",
      "settlement_id": "43432432",
      "street_type": "STREET",
      "street": "вул. Ніжинська",
      "building": "15",
      "apartment": "23",
      "zip": "02090"
    }
  ],
  "phones": [
    {
      "type": "MOBILE",
      "number": "+380503410870"
    }
  ],
  "email": "email@example.com",
  "working_hours": {
    "mon": [
      [
        "08.00",
        "12.00"
      ],
      [
        "14.00",
        "18.00"
      ]
    ],
    "tue": [
      [
        "08.00",
        "12.00"
      ]
    ],
    "wed": [
      [
        "08.00",
        "12.00"
      ]
    ],
    "thu": [
      [
        "08.00",
        "12.00"
      ]
    ],
    "fri": [
      [
        "08.00",
        "12.00"
      ]
    ],
    "sat": [
      [
        "08.00",
        "12.00"
      ]
    ],
    "sun": [
      [
        "08.00",
        "12.00"
      ]
    ]
  },
  "type": "CLINIC",
  "external_id": "3213213",
  "location": {
    "latitude": 30.1233,
    "longitude": 50.32423
  }
}

Response: {"meta":{"url":"http://api-svc.il/api/divisions","type":"object","request_id":"783dfcf0-c0a1-46f2-80c8-5b90efbb9b1e#54013","code":500},"error":{"errors":{"detail":"Internal server error"}}}

danakonovalenko commented 6 years ago

проблема в "settlement_id": "43432432" - значення не є валідним, settlement_id - це uuid, який має бути отриманий викликом /api/uaddresses/settlements?. Також валідується ієрархія - область та район. Для прикладу:

 "addresses": [
    {
        "type": "RESIDENCE",
        "country": "UA",
        "area": "ВОЛИНСЬКА",
        "settlement": "ЛУЦЬК",
        "settlement_type": "CITY",
        "settlement_id": "2029f5e9-0682-4ecf-b4c3-605a9ef800ca",
        "street_type": "STREET",
        "street": "Олицька",
        "building": "2",
        "apartment": "23",
        "zip": "43000"
      }
  ]