ทำไม "คำตอบที่ยอมรับ" ได้ผล ... แต่มันไม่เพียงพอสำหรับฉัน
สิ่งนี้ใช้งานได้ในข้อกำหนด อย่างน้อยswagger-tools
(เวอร์ชัน 0.10.1) ตรวจสอบว่าถูกต้อง
แต่ถ้าคุณใช้เครื่องมืออื่น ๆ เช่นswagger-codegen
(เวอร์ชัน 2.1.6) คุณจะพบปัญหาแม้ว่าไคลเอ็นต์ที่สร้างขึ้นจะมีข้อกำหนดการรับรองความถูกต้องเช่นนี้:
this.authentications = {
'Bearer': {type: 'apiKey', 'in': 'header', name: 'Authorization'}
};
ไม่มีวิธีส่งโทเค็นไปยังส่วนหัวก่อนที่จะเรียกวิธีการ (ปลายทาง) ดูลายเซ็นฟังก์ชันนี้:
this.rootGet = function(callback) { ... }
ซึ่งหมายความว่าฉันส่งผ่านการเรียกกลับเท่านั้น (ในกรณีอื่น ๆ พารามิเตอร์การค้นหา ฯลฯ ) โดยไม่มีโทเค็นซึ่งนำไปสู่การสร้างคำขอไปยังเซิร์ฟเวอร์ที่ไม่ถูกต้อง
ทางเลือกของฉัน
น่าเสียดายที่มันไม่ "สวย" แต่ใช้งานได้จนกว่าฉันจะได้รับการสนับสนุน JWT Tokens บน Swagger
หมายเหตุ: ซึ่งกำลังกล่าวถึงใน
ดังนั้นจึงจัดการการตรวจสอบสิทธิ์เหมือนส่วนหัวมาตรฐาน บนpath
วัตถุต่อท้าย paremeter ส่วนหัว:
swagger: '2.0'
info:
version: 1.0.0
title: Based on "Basic Auth Example"
description: >
An example for how to use Auth with Swagger.
host: localhost
schemes:
- http
- https
paths:
/:
get:
parameters:
-
name: authorization
in: header
type: string
required: true
responses:
'200':
description: 'Will send `Authenticated`'
'403':
description: 'You do not have necessary permissions for the resource'
สิ่งนี้จะสร้างไคลเอนต์ที่มีพารามิเตอร์ใหม่บนลายเซ็นวิธี:
this.rootGet = function(authorization, callback) {
// ...
var headerParams = {
'authorization': authorization
};
// ...
}
หากต้องการใช้วิธีนี้อย่างถูกต้องเพียงแค่ส่ง "สตริงเต็ม"
// 'token' and 'cb' comes from elsewhere
var header = 'Bearer ' + token;
sdk.rootGet(header, cb);
และใช้งานได้