繁体   English   中英

Java POST请求以从Web服务获取令牌

[英]Java POST request to get token from web service

我需要从Java应用程序访问某些使用基于令牌的身份验证的RESTful Web服务。 据我了解,为此目的的最佳选择是使用基于Jersey的球衣,例如Jersey,但是我对此并不陌生。 也许有人可以通过给出适当请求的示例代码来帮助我,以从Web服务获取令牌。

我们有什么:

  • 令牌发行服务器的URI。 它使用oAuth2授权。
  • clientId和clientSecret。 我们必须将它们提交给令牌发行服务器,该服务器将验证它们并返回令牌。
  • Web服务本身的URI。
  • 用于访问服务的用户名和密码。

据我了解,要获得令牌,我必须发送POST请求以及以下标头:

  • “授权”,“基本YWRhMGI3NTicdscsN2I0MjNjM2EwNWQ0MjM2ZTg6QU1hS0ltUEZJaUFSR3dGMmJ3NjZZVi9Ec05YZTd0ZkEerfrvegezNoND0 =“(“基础”客户端):+64
  • “接受”,“应用程序/ x-www-form-urlencoded”
  • “内容类型”,“应用程序/ json; odata =详细”

和以下参数:

grant_type =密码&用户名= someusername&密码= somepassword&范围=轮廓

希望有人能帮我提供示例代码。

解决!

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public void getHttpCon() throws Exception{

    String POST_PARAMS = "grant_type=password&username=someusrname&password=somepswd&scope=profile";
    URL obj = new URL("http://someIP/oauth/token");
    HttpURLConnection con = (HttpURLConnection) obj.openConnection();
    con.setRequestMethod("POST");
            con.setRequestProperty("Content-Type", "application/json;odata=verbose");
    con.setRequestProperty("Authorization",
            "Basic Base64_encoded_clientId:clientSecret");
    con.setRequestProperty("Accept",
            "application/x-www-form-urlencoded");

    // For POST only - START
    con.setDoOutput(true);
    OutputStream os = con.getOutputStream();
    os.write(POST_PARAMS.getBytes());
    os.flush();
    os.close();
    // For POST only - END

    int responseCode = con.getResponseCode();
    System.out.println("POST Response Code :: " + responseCode);

    if (responseCode == HttpURLConnection.HTTP_OK) { //success
        BufferedReader in = new BufferedReader(new InputStreamReader(
                con.getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();

        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();

        // print result
        System.out.println(response.toString());
    } else {
        System.out.println("POST request not worked");
    }
}    

一些要点:

  • 您指定的URL请求是属于资源所有者密码凭据授予的请求。 确保您处于此补助金适用的情况下( 此处有更多详细信息)。
  • JAX-RS是关于实现REST api的,而不是关于客户端调用的(也许您是在谈论“ jax-rs客户端”?如果是这样的话,就oauth而言,它属于我的最后一个论点) http客户端)。
  • 有一些库可以为您处理获取访问令牌的过程,因此您只需要提供属性并决定如何处理生成的令牌。 例如,如果您可以使用Spring ,则可以使用Spring Security OAuth2 (仅谈论“客户端角色”配置;您将使用外部授权服务器)。
  • 如果这些库不适合您的情况:您只需实现/使用http客户端对该授权服务器进行标准调用(它们只是REST api)。 一些选项: apache httpcomponentsSpring RestTemplatejdk HttpUrlConnection

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM