【问题标题】:Spring Security: Obtaining OAuth Token from a Java applicationSpring Security:从 Java 应用程序获取 OAuth 令牌
【发布时间】:2017-05-01 23:16:55
【问题描述】:

我在一个应用程序内有一个带有一组 REST 服务的 API,该应用程序由 Sp​​ring Security 保护。这些服务运行良好,但现在我需要开发一个使用此 REST 服务的小型 JAVA 客户端。

此服务使用 OAuth 令牌进行保护,我正在尝试找到获取此令牌的方法。

URL myURL = new URL("http://localhost:8080/oauth/token");
String userPassword = "user:user";
String encoding = new sun.misc.BASE64Encoder().encode(userPassword.getBytes());
URLConnection uc = myURL.openConnection();
uc.setRequestProperty("Authorization", "Basic " + encoding);

现在,我有类似的东西,但它不能正常工作,我无法获得调用服务所需的令牌。

谁能帮帮我?

问候!

【问题讨论】:

    标签: spring url oauth


    【解决方案1】:

    终于找到了解决办法:

    import org.springframework.security.oauth2.client.DefaultOAuth2ClientContext;
    import org.springframework.security.oauth2.client.OAuth2RestTemplate;
    import org.springframework.security.oauth2.client.token.DefaultAccessTokenRequest;
    import org.springframework.security.oauth2.client.token.grant.password.ResourceOwnerPasswordAccessTokenProvider;
    import org.springframework.security.oauth2.client.token.grant.password.ResourceOwnerPasswordResourceDetails;
    import org.springframework.security.oauth2.common.OAuth2AccessToken;
    
    private static String baseUrl = "http://localhost:8080";
    private static String tokenUrl = "http://localhost:8080/oauth/token";
    
    ResourceOwnerPasswordAccessTokenProvider provider = new ResourceOwnerPasswordAccessTokenProvider();
    ResourceOwnerPasswordResourceDetails resource = new ResourceOwnerPasswordResourceDetails();
    //resource.setClientAuthenticationScheme(AuthenticationScheme.none);
    resource.setAccessTokenUri(tokenUrl);
    resource.setScope(Arrays.asList("yourScope"));
    resource.setClientId("yourClientId");
    resource.setClientSecret("yourClientSecret");
    resource.setGrantType("password");
    resource.setUsername("yourUser");
    resource.setPassword("yourPass");
    OAuth2AccessToken accessToken = provider.obtainAccessToken(resource, new DefaultAccessTokenRequest());
    OAuth2RestTemplate restTemplate = new OAuth2RestTemplate(resource, new DefaultOAuth2ClientContext(accessToken));
    String result = restTemplate.getForObject(baseUrl+"/myExample", String.class);
    System.err.println(result);
    

    在我的 pom.xml 中,内容是:

        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.4</version>
        </dependency>
        <!-- Spring dependences -->
        <dependency>
            <groupId>org.springframework.security.oauth</groupId>
            <artifactId>spring-security-oauth2</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-jwt</artifactId>
            <version>1.0.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.3.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.6.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.0.pr2</version>
        </dependency>
    

    这个例子很好用

    【讨论】:

      猜你喜欢
      • 2019-10-01
      • 2018-03-29
      • 1970-01-01
      • 1970-01-01
      • 2013-07-28
      • 1970-01-01
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多