我正在尝试使用swagger codegen maven插件(版本3.0.0)生成的ApiClient,从我的Spring Boot应用程序中使用OAuth2安全的REST API。身份验证服务器(keycoat)提供了一个JWT和刷新令牌,但我不知道如何最好地处理bean中的令牌。现在我的豆子看起来像这样:
@Configuration
public class SomeApiClientConfiguration {
@Bean
public SomeApi someApi() {
return new SomeApi(apiClient());
}
@Bean
public ApiClient apiClient() {
ApiClient apiClient = new ApiClient();
OAuth oAuth = (OAuth) apiClient.getAuthentication("auth");
oAuth.setAccessToken("");
return apiClient;
}
}
问题是:获取令牌和处理刷新令牌的最佳方法是什么?
编辑:为了获得令牌,我想使用客户端ID、用户名和密码。授予类型:密码凭据。
最好,
马克
我解决了这个问题,并想分享解决方案以供将来参考:
这是我的SomeApiClientConfiguration:
@Configuration
public class SomeApiClientConfiguration{
@Value("${app.api.url}")
private String apiURL;
@Bean
public SomeApi someApi(OAuth2RestTemplate restTemplate) {
return new SomeApi(apiClient(restTemplate));
}
@Bean
public ApiClient apiClient(OAuth2RestTemplate restTemplate) {
var apiClient = new ApiClient(restTemplate);
apiClient.setBasePath(apiURL);
return apiClient;
}
}
另外,我需要一个SomeApiAuth2Config类,如下所示:
@Configuration
@EnableOAuth2Client
public class SomeApiOAuth2Config {
@Value("${app.api.client-id}")
private String clientId;
@Value("${app.api.token-endpoint}")
private String accessTokenUri;
@Value("${app.api.name}")
private String username;
@Value("${app.api.password}")
private String password;
@Bean
public ClientHttpRequestFactory httpRequestFactory() {
return new HttpComponentsClientHttpRequestFactory(httpClient());
}
@Bean
public HttpClient httpClient() {
var connectionManager = new PoolingHttpClientConnectionManager();
var maxPoolSize = 1;
connectionManager.setMaxTotal(maxPoolSize);
// This client is for internal connections so only one route is expected
connectionManager.setDefaultMaxPerRoute(maxPoolSize);
return HttpClientBuilder.create().setConnectionManager(connectionManager).build();
}
@Bean
public OAuth2ProtectedResourceDetails oauth2ProtectedResourceDetails() {
var details = new ResourceOwnerPasswordResourceDetails();
var resourceId = "";
details.setId(resourceId);
details.setClientId(clientId);
var clientSecret = "";
details.setClientSecret(clientSecret);
details.setAccessTokenUri(accessTokenUri);
details.setClientAuthenticationScheme(AuthenticationScheme.form);
return details;
}
@Bean
public AccessTokenProvider accessTokenProvider() {
var tokenProvider = new ResourceOwnerPasswordAccessTokenProvider();
tokenProvider.setRequestFactory(httpRequestFactory());
return new AccessTokenProviderChain(
Collections.<AccessTokenProvider>singletonList(tokenProvider)
);
}
@Bean
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public OAuth2RestTemplate restTemplate(@Qualifier("oauth2ClientContext") OAuth2ClientContext oauth2ClientContext) {
var template = new OAuth2RestTemplate(oauth2ProtectedResourceDetails(), oauth2ClientContext);
template.setRequestFactory(httpRequestFactory());
template.setAccessTokenProvider(accessTokenProvider());
template.getOAuth2ClientContext().getAccessTokenRequest().set("username", username);
template.getOAuth2ClientContext().getAccessTokenRequest().set("password", password);
return template;
}
}
我有一个使用JWT进行身份验证的RESTful API。我从客户端收到的第一个调用是 /login调用,具有以下有效负载(没有标头) 服务器验证用户是否已注册,然后将签名的JWT返回给客户端,以便在下一次调用中接收。 我想知道这是否足够安全。我不会在任何地方检查客户端是否向我发送了客户端id/客户端密码(如在OAuth中),因此我无法验证此调用是否来自我的webapp/应用程序,或者是否是我不知道
我正在为Kubernetes使用fabric8 java客户端库。我无法找到对容器执行更新操作的最佳方法。基本上,我想做的是,我已经创建了一个容器映像为“nginx”的pod,现在我想更新这个映像为“nginx:1.16.1”。 我想做的是
我试图在我的资源服务器上配置Swagger身份验证,以便我可以根据我的授权服务器进行身份验证。 我将资源服务器和授权服务器分开。它们都使用不同的端口在我的本地主机上启动。 端口8083上的资源服务器 每当我试图“授权”时,就会出现CORS问题。 我从另一个网站分叉了一个项目作为我的测试场地。下面是分叉项目。 https://github.com/cbriarnold/oauth2-spring-b
我开发了一个安全的Spring BootRest Api,使用基本的auth头,现在我试图添加SSL来防止中间人攻击,就像Spring教程建议的那样,所以我通过生成密钥库来激活Spring的SSL安全性。我添加到资源中的JKS。服务器工作正常。 现在我有了一个JavaFX客户机,在那里我使用Unirest Api来执行请求,但我不知道如何更新我的客户机以成功地向我的服务器执行get/post请求。
我想使用swagger-codegen生成我的假客户端代码,但我找不到能够引导我这样做的文档。 我有一个使用spring cloud的微服务,几个使用spring-cloud-feign接口请求数据的API服务。我希望我能生成feign客户端代码。 我很困惑如何生成我所有的代码?似乎几乎没有指南、文档或演示?
我需要在eclipse中使用with swagger codegen插件(用于maven)生成服务器存根代码。你能帮我怎么做吗?以及需要什么配置(在pom.xml中)。