Tại sao "Câu trả lời được chấp nhận" hoạt động ... nhưng nó vẫn chưa đủ đối với tôi
Điều này hoạt động trong đặc điểm kỹ thuật. Ít nhất swagger-tools
(phiên bản 0.10.1) xác nhận nó là hợp lệ.
Nhưng nếu bạn đang sử dụng các công cụ khác như swagger-codegen
(phiên bản 2.1.6), bạn sẽ gặp một số khó khăn, ngay cả khi ứng dụng khách được tạo có chứa định nghĩa Xác thực, như sau:
this.authentications = {
'Bearer': {type: 'apiKey', 'in': 'header', name: 'Authorization'}
};
Không có cách nào để chuyển mã thông báo vào tiêu đề trước khi phương thức (điểm cuối) được gọi. Nhìn vào chữ ký chức năng này:
this.rootGet = function(callback) { ... }
Điều này có nghĩa là, tôi chỉ chuyển lệnh gọi lại (trong các trường hợp khác là tham số truy vấn, v.v.) mà không có mã thông báo, điều này dẫn đến việc xây dựng yêu cầu tới máy chủ không chính xác.
Thay thế của tôi
Thật không may, nó không "đẹp" nhưng nó hoạt động cho đến khi tôi nhận được hỗ trợ Mã thông báo JWT trên Swagger.
Lưu ý: đang được thảo luận trong
Vì vậy, nó xử lý xác thực giống như một tiêu đề tiêu chuẩn. Trên path
đối tượng, nối một paremeter tiêu đề:
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'
Điều này sẽ tạo ra một máy khách với một tham số mới trên chữ ký phương thức:
this.rootGet = function(authorization, callback) {
// ...
var headerParams = {
'authorization': authorization
};
// ...
}
Để sử dụng phương pháp này theo đúng cách, chỉ cần chuyển "chuỗi đầy đủ"
// 'token' and 'cb' comes from elsewhere
var header = 'Bearer ' + token;
sdk.rootGet(header, cb);
Và hoạt động.