2013-02-14 19 views
17

क्या ओएथ 2 का उपयोग करने वाले एपीआई के लिए प्रलेखन/परीक्षण उपकरण के रूप में स्वैगर का उपयोग करना संभव है? मुझे swagger साइट पर कुछ भी नहीं दिख रहा है (या उस मामले के लिए कहीं और)। मैंने जो भी उपयोग देखा है वह या तो एपीआई कुंजी, HTTP मूल, या कुकीज़ का उपयोग करता है।OAuth API के साथ swagger का उपयोग कैसे करें?

उत्तर

5

मैं एक ही पंक्ति के साथ काम कर रहा हूं। स्वैगर किसी हेडर या यूआरएल को एपीआई कुंजी या टोकन परिभाषित करेगा। एपीआई और एप में एक सत्यापन सहायक जोड़ना एक मानक दृष्टिकोण है।

ओथ को एचटीएमएल समीक्षा की आवश्यकता है और हैंडशेक औथ प्रक्रिया शुरू करने के लिए लॉगिन करें। इसका मतलब यह है कि एक स्वैगर एपीआई को मानक लॉगिन और स्कोप स्वीकृति के लिए वेब इंटरफ़ेस का समर्थन करने की आवश्यकता होगी। Swagger में रोलिंग oauth कुछ तर्क लूप में परिणाम, जो लंबे समय तक समर्थन करने के लिए आसान नहीं है।

एक अलग दृष्टिकोण जिसे हम खोज रहे हैं वह एपीआई हैंडल को स्टोर करने और कई अलग-अलग ओथ प्रदाताओं के लिए एक्सेस टोकन स्टोर करने का विकल्प है; गिटहब, ट्विटर और फेसबुक। इसका परिणाम लॉगिन लूप भी हो सकता है।

+0

टिप्पणी के लिए धन्यवाद। ऐसा लगता है कि आप swagger की विकास टीम का हिस्सा हैं? क्या कोई दस्तावेज है जो आपकी प्रगति या प्रक्रिया से बात करता है? धन्यवाद! – fool4jesus

0

mashery से IOdocs OAuth का समर्थन करने लगता है, लेकिन यह swagger (redis, node, आदि) से काफी अलग है। यह github पर उपलब्ध है।

5

यहां पार्टी के लिए देर हो चुकी है लेकिन ओथ समर्थन अब swagger-core के 1.3.0-आरसी 1 में है। जावास्क्रिप्ट लाइब्रेरी जो ओएथ का समर्थन कर सकती है, को कल swagger-js में रिलीज़ किया गया था। अंत में, swagger-ui विकास चरण में है, और जल्द ही एक ओथ अंतर्निहित और सर्वर प्रवाह होगा।

+0

बहुत बहुत धन्यवाद - पार्टी के देर से कभी दिखने से कहीं ज्यादा बेहतर नहीं है! यह कमाल की खबर है। धन्यवाद, फ्रेट आपातकालीन हार्बर गाय! :-) – fool4jesus

3

ब्लॉग की पोस्ट http://developers-blog.helloreverb.com/enabling-oauth-with-swagger/ @fehguy द्वारा उद्धृत जावा कोड का एक उदाहरण दिखाता है जिसमें स्वैगर द्वारा उत्पन्न जेसन में प्राधिकरण डेटा शामिल है, हालांकि मेरा प्रश्न यह था कि इसे स्प्रिंग, जेएक्सआरएस और सीएक्सएफ के साथ ऐप के साथ शामिल किया जाना चाहिए। मुझे इसे सीएक्सएफ + जेएक्सआरएस नमूना में नहीं मिला: https://github.com/swagger-api/swagger-core/tree/master/samples/java-jaxrs-cxf

हालांकि, थोड़ी अधिक और गॉचा की तलाश में!

https://github.com/swagger-api/swagger-core/blob/master/samples/java-jersey-spring/src/main/resources/beans-asset-ws.xml

आवश्यक है एक वर्ग बूटस्ट्रैप कहा जाता है के साथ एक बीन में शामिल हैं (HttpServlet फैली) और एक स्थिर ब्लॉक!

राय: हो सकता है कि यह स्टेग क्लास में स्वैगर कॉन्फिग स्कैनर द्वारा स्वेट में एक स्थिर ब्लॉक के बजाय एनोटेशन से लोड "स्प्रिंग-फ्रेंडली" होगा।

+6

पहला लिंक मृत है – Andrii

+0

आजकल, ऐसा करने के लिए एक और तरीका है .. आप किस प्रकार का swagger/spring का उपयोग कर रहे हैं? मैं मदद कर सकता हूं .. और मेरा जवाब अपडेट करें .. –

0
@Configuration 
public class SwaggerConfiguration { 

    @Bean 
    @DependsOn("jaxRsServer") //org.apache.cxf.endpoint.Server bean 
    public ServletContextInitializer initializer() { 
     return new ServletContextInitializer() { 
      @Override 
      public void onStartup(ServletContext servletContext) throws ServletException { 
       BeanConfig scanner = (BeanConfig) ScannerFactory.getScanner(); 
       Swagger swagger = scanner.getSwagger(); 
       servletContext.setAttribute("swagger", swagger); 
      } 
     }; 
    } 

    @Bean 
    public Feature swaggerFeature() { 
     XSwagger2Feature feature = new XSwagger2Feature(); 

     return feature; 
    } 

    @Bean 
    public FilterRegistrationBean swaggerApiFilter() { 
     ApiOriginFilter filter = new ApiOriginFilter(); 

     FilterRegistrationBean registrationBean = new FilterRegistrationBean(); 
     registrationBean.setFilter(filter); 
     registrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE); 

     return registrationBean; 
    } 

    public static class XSwagger2Feature extends Swagger2Feature { 

     @Override 
     protected void addSwaggerResource(Server server) { 
      super.addSwaggerResource(server); 

      BeanConfig scanner = (BeanConfig) ScannerFactory.getScanner(); 
      Swagger swagger = scanner.getSwagger(); 
      swagger.securityDefinition("api_key", new ApiKeyAuthDefinition("api_key", In.HEADER)); 
      swagger.securityDefinition("petstore_auth", 
       new OAuth2Definition() 
       .implicit("http://petstore.swagger.io/api/oauth/dialog") 
       .scope("read:pets", "read your pets") 
       .scope("write:pets", "modify pets in your account")); 
     } 

    } 

}