是否可以使用普通 Java 使用 okHttp 客户端执行 OAuth2 请求

Use*_*751 3 java oauth-2.0 okhttp

我尝试将 api 与 OAuth2 结合使用。有了邮差就可以了。但现在我尝试用Java 来写这个。我没有 spring boot,它是一个简单的 Maven 项目我发现的唯一示例是这个

示例 okhttp

但它似乎只适用于基本身份验证。

我的问题是,是否可以使用 okhttp 进行 Oauth2?或者是错误的库?

Use*_*751 6

所以我的解决方案是生成 post 请求来获取令牌

 private static void postCall() throws IOException {

    // Create a new HTTP client        
    OkHttpClient client = new OkHttpClient()
            .newBuilder()           
            .build();

    // Create the request body
    MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody body = RequestBody.Companion.create("password=yourPassword&grant_type=password&client_id=yoirClientId&username=yourUserName",mediaType);
    
    // Build the request object, with method, headers
    Request request = new Request.Builder()
            .url("https://your-address-to-get-the-token/openid-connect/token")
            .method("POST", body)               
            .build();
            
    // Perform the request, this potentially throws an IOException
    Response response = client.newCall(request).execute();
    // Read the body of the response into a hashmap
    Map<String, Object> responseMap = new ObjectMapper().readValue(response.body().byteStream(), HashMap.class);
    // Read the value of the "access_token" key from the hashmap
    String accessToken = (String) responseMap.get("access_token");
    //System.out.println(responseMap.toString());
    // Return the access_token value
    System.out.println("accessToken " + accessToken);

     request = new Request.Builder()
            .url("https://your-endpoint-rest-call")
            .method("GET", null)
            .addHeader("Authorization", "Bearer " + accessToken)
            .build();

     response = client.newCall(request).execute();
     System.out.println("Response" + response.body().string());


}
Run Code Online (Sandbox Code Playgroud)