मैं स्वैगर स्पेस (स्वैगर.जसन) में 'प्राधिकरण: बियरर <टोकन>' का प्रतिनिधित्व कैसे कर सकता हूं


112

मैं यह बताने की कोशिश कर रहा हूं कि प्रमाणीकरण / सुरक्षा योजना के लिए हेडर सेट करने की आवश्यकता है:

Authorization: Bearer <token>

यह मैंने स्वैगर प्रलेखन पर आधारित है :

securityDefinitions:
  APIKey:
    type: apiKey
    name: Authorization
    in: header
security:
  - APIKey: []

जवाबों:


138

शायद यह मदद कर सकता है:

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: basic-auth-server.herokuapp.com
schemes:
  - http
  - https
securityDefinitions:
  Bearer:
    type: apiKey
    name: Authorization
    in: header
paths:
  /:
    get:
      security:
        - Bearer: []
      responses:
        '200':
          description: 'Will send `Authenticated`'
        '403': 
          description: 'You do not have necessary permissions for the resource'

आप इसे यहां कॉपी और पेस्ट कर सकते हैं: http://editor.swagger.io/#/ परिणामों की जांच करने के लिए।

अधिक जटिल सुरक्षा कॉन्फ़िगरेशन के साथ स्वैगर संपादक वेब में कई उदाहरण भी हैं जो आपकी मदद कर सकते हैं।


4
मैं यह नहीं देखता कि आप संपादक को यह कैसे बताते हैं कि उपयोगकर्ता और पासवर्ड या बेसिक टोकन भेजें ताकि आप 200 प्राप्त कर सकें। क्या मुझे कुछ याद आ रहा है?
रोब

1
कोई बात नहीं। जाहिरा तौर पर "प्रमाणीकरण" एक ऐसी चीज़ है जिस पर आप क्लिक करके लॉगिन फ़ॉर्म प्राप्त कर सकते हैं।
राब

तो मैं टोकन के लिए एक मूल्य कैसे निर्धारित करूं? मैं करने की कोशिश की कर्ल -x प्राप्त --header "प्राधिकरण: apiKey = 123" लेकिन कुछ नहीं हुआ
Gobliins

2
@Gobliins आप चाहते हैं curl -X GET -H "Authorization: Bearer your_token", जहां your_tokenअपने वाहक टोकन है। जैसेcurl -X GET -H "Accept: application/json" -H "Authorization: Bearer 00000000-0000-0000-0000-000000000000" "http://localhost/secure-endpoint"
स्टीव के K

15
दुर्भाग्य से यह स्वैगर यूआई के साथ अच्छी तरह से काम नहीं करता है - "अधिकृत" पर क्लिक करने और एक नंगे टोकन प्रदान करने से ओपनएपीआई 3 जवाब के -H "Authorization: foo"बजाय "कर्ल उदाहरण" -H "Authorization: Bearer foo"आज़माएँगे
अबे वोल्कर

56

OpenAPI 3.0.0 में बियरर प्रमाणीकरण

OpenAPI 3.0 अब मूल रूप से Bearer / JWT प्रमाणीकरण का समर्थन करता है। इसे इस तरह परिभाषित किया गया है:

openapi: 3.0.0
...

components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT  # optional, for documentation purposes only

security:
  - bearerAuth: []

यह Swagger UI 3.4.0+ और Swagger Editor 3.1.12+ (फिर से, OpenAPI 3.0 स्पेक्स के लिए केवल!) में समर्थित है।

यूआई "अधिकृत" बटन प्रदर्शित करेगा, जिसे आप क्लिक कर सकते हैं और वाहक को दर्ज कर सकते हैं (बस "टोकन", "बियरर" उपसर्ग के बिना)। उसके बाद, "इसे आज़माएं" अनुरोध Authorization: Bearer xxxxxxहेडर के साथ भेजे जाएंगे ।

Authorizationहेडर को प्रोग्रामेटिक रूप से जोड़ना (स्वैगर UI 3.x)

यदि आप Swagger UI का उपयोग करते हैं और, किसी कारण से, Authorizationउपयोगकर्ताओं को "अधिकृत" पर क्लिक करने और टोकन दर्ज करने के बजाय हेडर को प्रोग्रामेटिक रूप से जोड़ने की आवश्यकता है , तो आप इसका उपयोग कर सकते हैं requestInterceptor। यह समाधान स्वैगर UI 3.x के लिए है ; यूआई 2.x ने एक अलग तकनीक का इस्तेमाल किया।

// index.html

const ui = SwaggerUIBundle({
  url: "http://your.server.com/swagger.json",
  ...

  requestInterceptor: (req) => {
    req.headers.Authorization = "Bearer xxxxxxx"
    return req
  }
})

1
मैं इसे फ्लास्क-रेस्टप्लस जेनरेट किए गए स्वैगर डॉक्यूमेंटेशन में कैसे लागू करूं?
चांग झाओ

मुझे संदेह है कि यदि उत्तर उस प्रश्न के साथ संरेखित होता है जो पूछा गया था।
विश्रांत

16

"स्वीकृत उत्तर" क्यों काम करता है ... लेकिन यह मेरे लिए पर्याप्त नहीं था

यह विनिर्देश में काम करता है। कम से कम swagger-tools(संस्करण 0.10.1) इसे वैध के रूप में मान्य करता है।

लेकिन यदि आप अन्य उपकरणों का उपयोग कर रहे हैं जैसे swagger-codegen(संस्करण २.१.६) तो आपको कुछ कठिनाइयाँ आएंगी, भले ही इससे उत्पन्न ग्राहक में प्रमाणीकरण परिभाषा हो, जैसे:

this.authentications = {
  'Bearer': {type: 'apiKey', 'in': 'header', name: 'Authorization'}
};

विधि (समापन बिंदु) कहा जाता है से पहले हेडर में टोकन को पारित करने का कोई तरीका नहीं है। इस फंक्शन सिग्नेचर में देखें:

this.rootGet = function(callback) { ... }

इसका मतलब यह है कि, मैं केवल एक टोकन के बिना कॉलबैक (अन्य मामलों में क्वेरी पैरामीटर, आदि) पास करता हूं, जिससे सर्वर के अनुरोध का गलत निर्माण होता है।

मेरा विकल्प

दुर्भाग्य से, यह "सुंदर" नहीं है, लेकिन यह तब तक काम करता है जब तक मुझे स्वैगर पर जेडब्ल्यूटी टोकन समर्थन नहीं मिलता है।

नोट: जिस पर चर्चा की जा रही है

तो, यह एक मानक हेडर की तरह प्रमाणीकरण को संभालता है। 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);

और काम करता है।


"टोकन कहीं और से आता है" ... मुझे कहीं और दिलचस्पी है। जब आप लॉग इन करते हैं, तो आप अपने लॉगिन पर निर्देशित हो जाते हैं और अपने स्वैगर एपीआई पर पुनर्निर्देशित कर लेते हैं, आप प्राप्त टोकन का उपयोग कैसे कर सकते हैं?
नादिन

0

ओपन में 3.0.0 का उपयोग करके JSON में 2020 उत्तर पोस्ट करना:

{
  "openapi": "3.0.0",
  ...
  "servers": [
    {
      "url": "/"
    }
  ],
  ...
  "paths": {
    "/skills": {
      "put": {
        "security": [
           {
              "bearerAuth": []
           }
        ],
       ...
  },


  "components": {        
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    }
  }
}

0

इसे हल करने का मेरा हैकी तरीका मेरे मामले में गूंज-स्वैगर पैकेज में swagger.go फ़ाइल को संशोधित करके था:

फ़ाइल के निचले भाग में window.onload फ़ंक्शन को एक रिक्वेस्ट शामिल करने के लिए एक अनुरोध सम्मिलित करें जो टोकन को सही ढंग से प्रारूपित करता है।

window.onload = function() {
  // Build a system
  const ui = SwaggerUIBundle({
  url: "{{.URL}}",
  dom_id: '#swagger-ui',
  validatorUrl: null,
  presets: [
    SwaggerUIBundle.presets.apis,
    SwaggerUIStandalonePreset
  ],
  plugins: [
    SwaggerUIBundle.plugins.DownloadUrl
  ,
  layout: "StandaloneLayout",
  requestInterceptor: (req) => {
    req.headers.Authorization = "Bearer " + req.headers.Authorization
  return req
  }
})

window.ui = ui

}

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.