英文:
How to use Spring Boot feign client for Oauth2 authentication?
问题
我在本地有一个 OAuth 服务器,并希望从另一个服务使用 Feign 客户端调用它,以对我进行身份验证并提供一些令牌。
这是我在 Postman 中如何传递用户名、密码和授权类型的方式
如何在 Spring Boot 中使用 Feign 客户端实现相同的功能?
英文:
I have an oauth server at localhost and want to call it from another service uisng feign-client for authenticating me and giving me some token.
Here is how i pass my username,password and grant type i postman
Here is how my pass the basic auth details
How to do the same functionality using FeignClient in Spring Boot?
答案1
得分: 0
将@EnableFeignClients注解放置在Spring Boot主应用程序的Java类中。
创建一个Feign客户端接口来调用Web服务:
@FeignClient(value = "service-auth",
configuration = ClientConfig.class,
fallbackFactory = ClientFallbackFactory.class,
url = "http://localhost:10000/oauth/")
public interface GenericAbstractClient {
@RequestMapping(value="/token",
method = RequestMethod.POST,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE,
produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
ResponseVo auth(@RequestBody RequestVo body);
}
以及ClientFallbackFactory类:
@Component
class ClientFallbackFactory implements FallbackFactory<GenericAbstractClient> {
private static final Logger LOGGER = LoggerFactory.getLogger(ClientFallbackFactory.class);
@Override
public GenericAbstractClient create(Throwable cause) {
return new GenericAbstractClient() {
@Override
public ResponseVo auth(RequestVo body) {
LOGGER.warn("Hystrix exception", cause.getMessage());
return null;
}
};
}
}
你的RequestBody可能是一个Java类:
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class RequestVo {
private String grant_type;
private String username;
private String password;
}
以及ResponseVo类:
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ResponseVo {
private String access_token;
private String token_type;
private String expires_in;
private String scope;
}
你还可以添加以下配置:
@Configuration
public class ClientConfig {
private int connectTimeOutMillis = 120000;
private int readTimeOutMillis = 120000;
@Bean
public Request.Options options() {
return new Request.Options(connectTimeOutMillis, readTimeOutMillis);
}
}
这是你提供的内容的翻译部分。
英文:
put @EnableFeignClients in the spring boot main application java class .
create after an Feign client interface to call the web service :
@FeignClient(value = "service-auth",
configuration = ClientConfig.class,
fallbackFactory = ClientFallbackFactory.class,
url = "http://localhost:10000/oauth/")
public interface GenericAbstractClient {
@RequestMapping(value="/token",
method = RequestMethod.POST,
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE,
produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
ResponseVo auth(@RequestBody RequestVo body);
}
> and ClientFallbackFactory as :
@Component
class ClientFallbackFactory implements FallbackFactory<GenericAbstractClient> {
private static final Logger LOGGER = LoggerFactory.getLogger(ClientFallbackFactory.class);
@Override
public GenericAbstractClient create(Throwable cause) {
return new GenericAbstractClient () {
@Override
public ResponseVo oauth(RequestVo body) {
LOGGER.warn("Hystrix exception", cause.getMessage());
return null;
}
};
}
}
Your RequestBody might be a java class :
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class RequestVo {
private String grant_type;
private String username;
private String password;
}
and The ResponseVo class :
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ResponseVo {
private String access_token;
private String token_type;
private String exprires_in;
private String scope;
}
and you can add thise config :
@Configuration
public class ClientConfig {
private int connectTimeOutMillis = 120000;
private int readTimeOutMillis = 120000;
@Bean
public Request.Options options() {
return new Request.Options(connectTimeOutMillis, readTimeOutMillis);
}
}
答案2
得分: 0
请查看我在 https://stackoverflow.com/a/65741386/698471 上关于如何使client_credentials在您的情况下工作的回答,它会对您有所帮助,与您的使用情况相同。
英文:
Check my response on how to get client_credentials working on https://stackoverflow.com/a/65741386/698471, it will help you, it's the same use case
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论