mevdschee / php-crud-api

Single file PHP script that adds a REST API to a SQL database
MIT License
3.62k stars 1.01k forks source link

Authentication to see documentation #1032

Open Sparviero-Sughero opened 6 months ago

Sparviero-Sughero commented 6 months ago

I think there is some problems when you need to share API documentation using auth. I'm using

$config = new Config([
  'username' => 'aaa',
  'password' => 'bbb',
  'database' => 'ccc',
  'tables' => 'products',
  'openApiBase' => json_encode(array(
    "info" => array(
      "title" => "Title",
      "version" => "1.0.0",
    ),
    "components" => array(
      "securitySchemes" => array(
        "ApiKeyAuth" => array(
          "type" => "apiKey", 
          "in" => "header",
          "name" => "X-API-Key",
        )
      )
    )
  )),
  // auth 
  'apiKeyAuth.mode'=> 'required',
  'middlewares' => 'cors,apiKeyAuth',
  'apiKeyAuth.keys' => 'Vp7LxyEpfwYjSVm',
]);

In https://petstore.swagger.io/?url=https://<your domain>/api.php/openapi there is no way to pass the auth-key. I think you should define in json the option to enable auth also in swagger (or similar).

mevdschee commented 6 months ago

there is no way to pass the auth-key.

I know

I think you should define in json the option to enable auth also in swagger (or similar).

I'm not sure I properly understand what it is you are proposing. Can you try to clarify this for me?

Probably, what change do you think would be needed in the openapi to support authenticating using the api key?

I'm looking forward to your suggestion for improvement.

Sparviero-Sughero commented 6 months ago

Hi mevdschee (tnx for your amazing job). With the code

    "components" => array(
      "securitySchemes" => array(
        "ApiKeyAuth" => array(
          "type" => "apiKey", 
          "in" => "header",
          "name" => "X-API-Key",
        )
      )

swagger show the Authorize button. Then: 1) click on Authorize button 2) insert the apiKey 3) click to "Try it out" 4) click to "Execute" Swagger show "Loading" message and the API doesn't work. I don't know why :o( Maybe there is some options you need to add to json to enable auth on swagger?