আমি কীভাবে একটি সোয়াগার স্পেসে 'অনুমোদন: বহনকারী <টোকেন>' উপস্থাপন করতে পারি (swagger.json)


112

আমি জানাতে চেষ্টা করছি যে প্রমাণীকরণ / সুরক্ষা স্কিমের নীচে নীচে একটি শিরোনাম সেট করা দরকার:

Authorization: Bearer <token>

সোয়াগার ডকুমেন্টেশনের উপর ভিত্তি করেই আমি এটি করেছি :

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

উত্তর:


137

হতে পারে এটি সাহায্য করতে পারে:

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 - হেডার পাওয়ার "চেষ্টা করলাম" অনুমোদন: এপিকি = 123 "তবে কিছুই ঘটেনি
গোব্লিনস

2
@ গব্লিনস আপনি চান 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"
স্টিভ কে

14
দুর্ভাগ্যবশত, এই Swagger থেকে UI 'তে সঙ্গে ভাল কাজ করে না - নীচে "অনুমোদন" এবং একটি খালি টোকেন প্রদান উৎপন্ন সঙ্গে কার্ল উদাহরণ "এটি চেষ্টা করে দেখুন" হবে -H "Authorization: foo"পরিবর্তে -H "Authorization: Bearer foo"মত OpenAPI 3 উত্তর
আবে Voelker

56

ওপেনপিআই ৩.০.০ এ বহনকারী প্রমাণীকরণ

ওপেনপিআই ৩.০ এখন দেশীয়ভাবে বেয়ার / জেডাব্লুটি প্রমাণীকরণ সমর্থন করে। এটি এর মতো সংজ্ঞায়িত হয়েছে:

openapi: 3.0.0
...

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

security:
  - bearerAuth: []

এটি সোয়াগার ইউআই 3.4.0+ এবং সোয়াগার সম্পাদক 3.1.12+ (আবার, কেবল ওপেনপিআইআই 3.0 স্পেসের জন্য!) সমর্থিত।

ইউআই "অনুমোদন" বোতামটি প্রদর্শন করবে, যা আপনি ক্লিক করতে এবং ধারক টোকেন প্রবেশ করতে পারেন ("টোকেন নিজেই," বেয়ারার "উপসর্গ ব্যতীত)। এরপরে, "চেষ্টা করে দেখুন" অনুরোধগুলি সাথে প্রেরণ করা হবেAuthorization: Bearer xxxxxx হেডারের ।

Authorizationপ্রোগ্রামারিকভাবে শিরোনাম যুক্ত করা হচ্ছে (সোয়াগার ইউআই 3.x)

আপনি যদি সোয়াগার ইউআই ব্যবহার করেন এবং কোনও কারণে, Authorizationব্যবহারকারীদের "অনুমোদন" এ ক্লিক করার পরিবর্তে এবং টোকেনটি প্রবেশ করার পরিবর্তে প্রোগ্রামারিকভাবে শিরোনামটি যুক্ত করা প্রয়োজন , আপনি এটি ব্যবহার করতে পারেন requestInterceptor। এই সমাধানটি সোয়াগার ইউআই 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(সংস্করণ ২.১..6) আপনি কিছু অসুবিধা পেতে পারেন, উত্পন্ন ক্লায়েন্টের কাছে যেমন প্রমাণীকরণ সংজ্ঞা থাকে তবে:

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 ব্যবহার করে জেএসনে 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 = 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

}

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.