控えめにセキュリティを短縮します -- token フィールド と swagger フィールド と resteasy フィールド と swagger-ui フィールド と api-key フィールド 関連 問題

swagger securityDefinition with Resteasy












0
vote

問題

日本語

iアプリケーションサブクラスとBeanconfigオブジェクトをSwaggerを設定しました.My SecurityDefinitionでは、My SecurityDefinitionをSwagger UIがDE API_KEYフィールドを表示してすべてのMy Services Layerの認証を許可する必要があります。

<事前> <コード> BeanConfig beanConfig = new BeanConfig(); beanConfig.setSchemes(new String[] { "http" }); beanConfig.setHost("192.168.4.9:8080"); beanConfig.setBasePath("/cjppa/rest"); beanConfig.setResourcePackage("com.cjppa.fpuna.backend.resources"); beanConfig.setScan(true); beanConfig.setPrettyPrint(true); io.swagger.models.Info info = new io.swagger.models.Info(); io.swagger.models.Contact contact = new io.swagger.models.Contact(); info.setVersion("1.0"); beanConfig.setInfo(info); io.swagger.models.auth.ApiKeyAuthDefinition apikey = new io.swagger.models.auth.ApiKeyAuthDefinition(); apikey.setName("x-token"); apikey.setIn(In.HEADER); Swagger swagger = new Swagger().info(info); swagger.securityDefinition("api_key", apikey); beanConfig.configure(swagger);

予想されるAPI_KEYは "x-token" HTTPヘッダ

に入っています
英語

I did configure swagger with an Application subclass and the beanConfig object, my securityDefinition must allow swagger ui to show de api_key field to allow authentication for all my services layer.

    BeanConfig beanConfig = new BeanConfig();     beanConfig.setSchemes(new String[] { "http" });     beanConfig.setHost("192.168.4.9:8080");     beanConfig.setBasePath("/cjppa/rest");     beanConfig.setResourcePackage("com.cjppa.fpuna.backend.resources");     beanConfig.setScan(true);     beanConfig.setPrettyPrint(true);      io.swagger.models.Info info = new io.swagger.models.Info();     io.swagger.models.Contact contact = new io.swagger.models.Contact();     info.setVersion("1.0");     beanConfig.setInfo(info);      io.swagger.models.auth.ApiKeyAuthDefinition apikey = new      io.swagger.models.auth.ApiKeyAuthDefinition();     apikey.setName("x-token");     apikey.setIn(In.HEADER);       Swagger swagger = new Swagger().info(info);     swagger.securityDefinition("api_key", apikey);      beanConfig.configure(swagger); 

the expected api_key comes in the "x-token" http header

</div
              
 
 

回答リスト

2
 
vote

私のWebサービスの何らかの操作のためにBasicAuthentificationを使用して、Swaggerを私のResteasy WebServiceにSwaggerを持ってきました。私はPom.xmlのMavenを介して輸入されました:

<事前> <コード> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-jaxrs</artifactId> <version>1.5.18</version> </dependency>

My Application Class i Beanconfig:

<事前> <コード> import javax.ws.rs.ApplicationPath; import io.swagger.jaxrs.config.BeanConfig; @ApplicationPath("/rest") public class Application extends javax.ws.rs.core.Application{ public Application() { BeanConfig beanConfig = new BeanConfig(); beanConfig.setVersion("1.0"); beanConfig.setResourcePackage("de.mycompany.topic.ws"); beanConfig.setBasePath("/de.mycompany.topic.ws/rest/"); beanConfig.setScan(true); } }

重要なことは、注釈を介してReaderListener実装で認証された基本化を設定することです。 <コード> basicAuth は任意の名前です。

<事前> <コード> import io.swagger.annotations.BasicAuthDefinition; import io.swagger.annotations.SecurityDefinition; import io.swagger.annotations.SwaggerDefinition; import io.swagger.jaxrs.Reader; import io.swagger.jaxrs.config.ReaderListener; import io.swagger.models.Swagger; @SwaggerDefinition(securityDefinition = @SecurityDefinition(basicAuthDefinitions = { @BasicAuthDefinition(key = "basicAuth") }) ) public class SwaggerCustomizeDefinition implements ReaderListener { @Override public void beforeScan(Reader reader, Swagger swagger) { } @Override public void afterScan(Reader reader, Swagger swagger) { } }

MyRestServiceでは、基本認証なしでは使用できないことを注意してください。ここに見てください。顧客を節約するために:

<事前> <コード> @Api @Path("/") public class MyRestService { private final static String UTF8 = ";charset=UTF-8"; @POST @Path("/customer") @Produces(MediaType.APPLICATION_JSON + UTF8) @ApiOperation( value = "Saves customer specified in the body", notes = "note that appears in swagger ui", authorizations = { @Authorization(value = "basicAuth", scopes={}) }) @ApiResponses(value = { @ApiResponse(code = 201, message = "customer created"), @ApiResponse(code = 401, message = "Unauthorized"), @ApiResponse(code = 404, message = "customer format not supported"), }) public Response saveCustomer( String content, @BasicAuthDefinition(key = "basicAuth") @HeaderParam("Authorization") String authorization) { // authorization try { if (!MyManager.isAuthorized(authorization)) { return Response.status(Status.UNAUTHORIZED).build(); } } catch (Exception e) { return Response.status(Status.INTERNAL_SERVER_ERROR).build(); } //do the work, authorization was ok } }

それはそれです。私はたくさんのバリエーションを試みました、そしてこれは私のために全体的に働く唯一のものでした。私の主な問題は、AuthorizeボタンがUIに表示されず、Swagger UIの単一のメソッドの上のロックはクリック可能ではありませんでしたので、基本認証モーダルダイアログは表示されませんでした。この実装では機能します。

 

I tried also to bring swagger into my resteasy webservice with using BasicAuthentification for some operations of my webservice. I imported swagger via maven in my pom.xml:

<dependency>     <groupId>io.swagger</groupId>     <artifactId>swagger-jaxrs</artifactId>     <version>1.5.18</version> </dependency> 

In my Application class I configured the BeanConfig:

import javax.ws.rs.ApplicationPath;  import io.swagger.jaxrs.config.BeanConfig;    @ApplicationPath("/rest") public class Application extends javax.ws.rs.core.Application{  public Application() {     BeanConfig beanConfig = new BeanConfig();     beanConfig.setVersion("1.0");     beanConfig.setResourcePackage("de.mycompany.topic.ws");      beanConfig.setBasePath("/de.mycompany.topic.ws/rest/");     beanConfig.setScan(true); } } 

The important thing is to configure the BasicAuthentification in an ReaderListener implementation via Annotations. basicAuth is an arbitrary name.

import io.swagger.annotations.BasicAuthDefinition; import io.swagger.annotations.SecurityDefinition; import io.swagger.annotations.SwaggerDefinition; import io.swagger.jaxrs.Reader; import io.swagger.jaxrs.config.ReaderListener; import io.swagger.models.Swagger;  @SwaggerDefinition(securityDefinition = @SecurityDefinition(basicAuthDefinitions = {     @BasicAuthDefinition(key = "basicAuth")     }) ) public class SwaggerCustomizeDefinition implements ReaderListener {      @Override     public void beforeScan(Reader reader, Swagger swagger) {      }      @Override     public void afterScan(Reader reader, Swagger swagger) {     } } 

In MyRestService I annotate my operations that should be not usable without basic authentification. See here e.g. for saving customers:

@Api @Path("/") public class MyRestService { private final static String UTF8 = ";charset=UTF-8";  @POST     @Path("/customer")     @Produces(MediaType.APPLICATION_JSON + UTF8)     @ApiOperation(         value = "Saves customer specified in the body",         notes = "note that appears in swagger ui",         authorizations = {             @Authorization(value = "basicAuth", scopes={})         })     @ApiResponses(value = {         @ApiResponse(code = 201, message = "customer created"),         @ApiResponse(code = 401, message = "Unauthorized"),         @ApiResponse(code = 404, message = "customer format not supported"),     })     public Response saveCustomer(         String content,         @BasicAuthDefinition(key = "basicAuth") @HeaderParam("Authorization") String authorization) {          // authorization         try {             if (!MyManager.isAuthorized(authorization)) {                 return Response.status(Status.UNAUTHORIZED).build();             }         } catch (Exception e) {             return Response.status(Status.INTERNAL_SERVER_ERROR).build();         }          //do the work, authorization was ok     } } 

That's it. I tried a lot of variations and this was the only one that works for me in whole. My main problem was, that the authorize button not appears in the ui and the lock above the single methods in the swagger ui was not clickable so that the basic authentification modal dialog not appears. With this implementation it works.

</div
 
 
0
 
vote

AFTSCANメソッドのAddeSecurityをAddeSerlistenerでは、io.swagger.jaxrs.config.ReaderListenerを実装できます。 例:

<事前> <コード> @SwaggerDefinition(securityDefinition = @SecurityDefinition(apiKeyAuthDefinitions = { @ApiKeyAuthDefinition(in = ApiKeyAuthDefinition.ApiKeyLocation.HEADER, key = "token", name = "E-token"), @ApiKeyAuthDefinition(in = ApiKeyAuthDefinition.ApiKeyLocation.HEADER, key = "userId", name = "E-userId"), @ApiKeyAuthDefinition(in = ApiKeyAuthDefinition.ApiKeyLocation.HEADER, key = "corpId", name = "E-corpId") }) ) public class SwaggerCustomizeDefinition implements ReaderListener { @Override public void beforeScan(Reader reader, Swagger swagger) { } @Override public void afterScan(Reader reader, Swagger swagger) { swagger.addSecurity(new SecurityRequirement().requirement("token")); swagger.addSecurity(new SecurityRequirement().requirement("userId")); swagger.addSecurity(new SecurityRequirement().requirement("corpId")); } }
 

you can implements io.swagger.jaxrs.config.ReaderListener ,addSecurity in afterScan method . eg:

@SwaggerDefinition(securityDefinition = @SecurityDefinition(apiKeyAuthDefinitions = {     @ApiKeyAuthDefinition(in = ApiKeyAuthDefinition.ApiKeyLocation.HEADER, key = "token", name = "E-token"),     @ApiKeyAuthDefinition(in = ApiKeyAuthDefinition.ApiKeyLocation.HEADER, key = "userId", name = "E-userId"),     @ApiKeyAuthDefinition(in = ApiKeyAuthDefinition.ApiKeyLocation.HEADER, key = "corpId", name = "E-corpId") }) ) public class SwaggerCustomizeDefinition implements ReaderListener {      @Override     public void beforeScan(Reader reader, Swagger swagger) {      }      @Override     public void afterScan(Reader reader, Swagger swagger) {         swagger.addSecurity(new SecurityRequirement().requirement("token"));         swagger.addSecurity(new SecurityRequirement().requirement("userId"));         swagger.addSecurity(new SecurityRequirement().requirement("corpId"));     }  } 
</div
 
 

関連する質問

1  Tastypie ApikeyAuthenticationを使用すると、クライアントがAPIキーを取得する方法?  ( How the client gets api key when using tastypie apikeyauthentication ) 
認証のために、 django-tastypie をREST APIおよび ApiKeyAuthentication を使用しています。新しいユーザーを作成するための "Thursday": { "times": { "currently_open"...

1  リモートコールを作成するときにAPIキーを盗まれるのを防ぐ方法  ( How to secure api keys from being stolen when making remote calls ) 
さまざまな外部サービスにアクセスするためのAPI_KEY、API_SECRETを持っています。これは現在のアーキテクチャ/モデルです。 ユーザー(ID、電子メール...) user_service_configs(ID、user_id、api_key、api_...

5  私のYahoo Developer APIキーをどこに見つけることができますか? [閉まっている]  ( Where can i find my yahoo developer api keys ) 
この質問はスタックオーバーフローガイドラインを満たしていません。現在答えを受け付けていません。 この質問を改善したいですか? O...

0  セキュリティ - デバイス上のリアルタイムでAPIキーを生成する  ( Security generate api key in real time on device ) 
最初に私はこれが間違っているのであれば、どのスタック交換サイトがこれで謝罪しているのかわからなかった。 私はこの記事で、あなたのモバイルアプリにAPIキーを保存する最も安全な方法と私に興味のある方法の1つがあることを講じます。ローカルにAPIキーを生成し、サー...

2  リファレンスが重要な制限で指定されているにもかかわらず、referountAllowedMaperror  ( Referernotallowedmaperror despite having referer specified in key restrictions ) 
私は千回をやったように、私はサイトにマップをマップに実装していますが、今回はそのキーとDevのサイトとDevサイトの特定のHTTPリファレファーにキーを制限すると、それが表示されます。うまくいきません。 プロトコルのない/含まれていないURLのすべての置換につ...

0  Googleマップを保護するJavaScript APIキー[DUPLICATE]  ( Protecting google maps javascript api key ) 
この質問はすでにここで回答を持っています DO I Google Maps JS APIを使用するときは、APIキーを隠す必要がありますか?もしそうなら、どのように? (...

94  localhostのためのGoogleMaps APIキー  ( Googlemaps api key for localhost ) 
Localhostで機能するGoogleMaps APIキーを取得する方法は? APIキーを作成し、参照元を追加しました。 <事前> <コード> Accept requests from these HTTP referrers (websites) (O...

2  Google Maps API v3には不在がありませんか。  ( Is an apikey absent in google maps api v3 ) 
ここラインを見た「注意:Google Maps APIキーは、JavaScript Maps API v2とフラッシュのマップAPIを使用する場合にのみ必要です。」そしてマップAPI v3 。 MakevieタグではApikeyが必要ないということですか。そ...

0  Facebook APIキーとAPIの秘密をどこに使用しますか  ( Where do i use the facebook api key and api secret ) 
Facebook APIキーとAPIシークレットをどこに使用しますか。 私はそれらなしで回避しているようです。それは問題を引き起こすでしょうか?彼らなしでも私は友達や壁に投稿することができます。 ...

0  控えめにセキュリティを短縮します  ( Swagger securitydefinition with resteasy ) 
iアプリケーションサブクラスとBeanconfigオブジェクトをSwaggerを設定しました.My SecurityDefinitionでは、My SecurityDefinitionをSwagger UIがDE API_KEYフィールドを表示してすべてのM...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有