Swagger UI dengan otentikasi intisari

Saya menggunakan Swagger untuk menghasilkan dokumentasi REST API saya. Berdasarkan apa yang tertulis, UI Swagger tidak menawarkan dukungan untuk autentikasi dasar (berbeda dengan editor online). Masalah saya adalah salah satu API saya adalah POST yang memerlukan otentikasi intisari (bahkan bukan otentikasi dasar).

Solusi yang mungkin saya temukan adalah menambahkan header otentikasi user:pass tetap dalam permintaan melalui kode javascript. Hal ini dapat dilakukan dengan mudah berdasarkan dokumentasi UI Swagger (lihat Parameter Header Khusus). Saya melaporkan baris kode yang dituduhkan:

swaggerUi.api.clientAuthorizations.add("key", new SwaggerClient.ApiKeyAuthorization("Authorization", "XXXX", "header"));

Sayangnya itu tidak berhasil. Hasil bidang swaggerUi.api tidak diinisialisasi (null) setelah saya menginisialisasi objek SwaggerUi, dan sebagai konsekuensinya swaggerUi.api.clientAuthorizationstidak terdefinisi. Saya mencoba menginisialisasi bidang tersebut dengan cara yang berbeda, selalu gagal. Saya juga mencoba panggilan serupa ke API yang saya temukan di utas yang membahas topik ini, tetapi tidak ada satupun yang berhasil. Adakah yang punya ide tentang itu? Dokumentasinya tidak terlalu jelas mengenai hal itu.

Untuk kelengkapannya, saya laporkan cuplikan js tempat saya menginisialisasi Swagger UI

  var urlPush = "./doc_push.yaml";
  window.swaggerUiPush = new SwaggerUi({
        url: urlPush,
        dom_id: "swagger-ui-container-push",
        supportedSubmitMethods: ['get', 'post', 'put', 'delete', 'patch'],
        onFailure: function(data) {
          log("Unable to Load SwaggerUI");
        },
        docExpansion: "list",
        jsonEditor: false,
        defaultModelRendering: 'model',
        showRequestHeaders: false,
   });

person McKracken    schedule 27.09.2016    source sumber


Jawaban (1)


Coba gunakan SwaggerClient.PasswordAuthorization daripada SwaggerClient.ApiKeyAuthorization -

 var username = $('#input_username').val();
 var password = $('#input_password').val();
 var basicAuth = new SwaggerClient.PasswordAuthorization('basic', username, password);
 window.swaggerUi.api.clientAuthorizations.add("basicAuth", basicAuth);
person Sampada    schedule 28.09.2016
comment
Yang pasti, dengan cara itu ia menambahkan header Otorisasi: Basic XXXXXXX (hati-hati, versi baru tidak ingin ada kolom 'dasar'). Masalahnya adalah tampaknya ini menyelesaikan masalah Otentikasi Dasar, bukan masalah Otentikasi Intisari (yang memerlukan MD% dari pengguna:realm:pass). - person McKracken; 28.09.2016