代码之家  ›  专栏  ›  技术社区  ›  user1516815

使用带有spring rest模板的Oauth2(授权码)rest api

  •  3
  • user1516815  · 技术社区  · 7 年前

    我正在尝试在spring集成项目中使用rest 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();
    }
      }
    }
    
    2 回复  |  直到 7 年前
        1
  •  3
  •   Roman Shcherbakov    7 年前

    授权码流用于通过重定向在web浏览器中对用户进行身份验证。它需要通过用户名和密码进行用户身份验证。

    您的案例是关于两个服务之间的通信,也称为M2M(机器对机器)。由于安全原因,不允许服务单独存储用户凭据。您应该使用只需要客户端id和客户端机密才能进行身份验证的客户端凭据流。这样,您就可以使用OAuth2RestTemplate了。

        2
  •  0
  •   OhadR    7 年前

    如果服务由oAuth2保护,则必须使用oAuth规则才能访问资源服务器。这意味着你的应用程序需要注册并获取clientID和客户端密码,然后你的应用程序的用户可以使用它连接oAuth。。。

    无论您如何调用调用,都必须使用oAuth。 OAuth2RestTemplate 只是春天的 RestTemplate oAuth开发人员的实现,它抽象了一些与oAuth相关的逻辑。。。