是否可以使用普通 Java 的 okHttp 客户端发出 OAuth2 请求

Is it possible to do a OAuth2 request with okHttp client with plain Java

我尝试将 api 与 OAuth2 结合使用。与邮递员一起工作。 但是现在我尝试在 Java 中写这个。我没有 spring 引导,它是一个简单的 Maven 项目 我找到的唯一例子是这个

Example okhttp

但它似乎只适用于基本身份验证。 很奇怪我只找到 Android 个例子,没有 Java 个例子

我的问题是,是否可以使用 okhttp 执行 Oauth2?还是放错库了?

所以我的解决方案是生成 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());


}