[英]consume Oauth2 (authorization code) rest api with spring rest template
我正在尝试在Spring集成项目中使用其余的Web服务。 该Web服务由oauth2(授权代码)保护。任何想法如何实现?
我尝试使用OAuth2RestTemplate,但它给了我一个错误: org.springframework.security.oauth2.client.resource.UserRedirectRequiredException: A redirect is required to get the users approval
下面是我的代码。
import java.util.Arrays;
import org.springframework.security.oauth2.client.token.AccessTokenRequest;
import org.springframework.security.oauth2.client.token.DefaultAccessTokenRequest;
import org.springframework.security.oauth2.client.token.grant.code.AuthorizationCodeAccessTokenProvider;
import org.springframework.security.oauth2.client.token.grant.code.AuthorizationCodeResourceDetails;
public class OAuth2Client1 {
public static void main(String[] args) {
AuthorizationCodeResourceDetails resource = new AuthorizationCodeResourceDetails();
resource.setId("My Developer");
resource.setClientId("xxxxxx");
resource.setClientSecret("xxxxxx");
resource.setAccessTokenUri("https://api.infusionsoft.com/token");
resource.setUserAuthorizationUri("https://signin.infusionsoft.com/app/oauth/authorize");
resource.setPreEstablishedRedirectUri("https://myapps.com:8181/my_work");
resource.setScope(Arrays.asList("full"));
try {
AuthorizationCodeAccessTokenProvider authProvider =
new AuthorizationCodeAccessTokenProvider();
AccessTokenRequest request = new DefaultAccessTokenRequest();
String str = authProvider.obtainAuthorizationCode(resource, request);
System.out.println(str);
} catch (Exception e) {
e.printStackTrace();
}
}
}
授权代码流用于通过重定向在Web浏览器中对用户进行身份验证。 它要求通过用户名和密码进行用户身份验证。
您的案例涉及两个服务之间的通信,也称为M2M(机器对机器)。 由于安全原因,服务本身不允许存储用户凭据。 您应该使用仅需要客户端ID和客户端密钥进行身份验证的客户端凭据流。 这样便可以使用OAuth2RestTemplate。
如果服务受oAuth2保护,则必须使用oAuth规则才能访问资源服务器。 这意味着您的应用程序需要注册并获取clientID和client-secret,然后您的应用程序用户才能使用它来进行oAuth连接...
调用调用的方式无关紧要,必须使用oAuth。 OAuth2RestTemplate
只是oAuth开发人员的Spring RestTemplate
实现,它抽象了一些与oAuth相关的逻辑...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.