java - 从 OKTA API 获取 token - Java(普通)示例

标签 java httprequest okta

我已在 OKTA 环境中创建了一个帐户 here 。 我在网上搜索,但找不到任何有关如何从 OKTA API 获取访问 token 的示例。我正在寻找一些“普通”Java 代码的示例。但如果任何 SDK 中有什么东西,我会很高兴。 我尝试创建一个到 /token 端点的 HTTP 请求 (POST)。我在正文中使用了 client_idclient_secret 。我还尝试将其作为基本身份验证放入 header 中(在此之前,我使用 Base64 编码 client_id:client_secret),但我仍然未经授权 (401)。

最佳答案

好的,我有一个解决方案。问题是 OKTA 上的配置错误。 对于那些需要工作示例的人,我将分享我测试过的代码(相信我,它有效)

 public String GetToken() throws IOException, InterruptedException {
    HttpClient client = HttpClient.newBuilder()
            .build();

    HttpRequest httpRequest = HttpRequest.newBuilder()
            .uri(URI.create("https://YOUR_OKTA_DOMAIN/oauth2/default/v1/token"))
            .headers("Content-type", "application/x-www-form-urlencoded",
                    "Authorization", "Basic " + Base64.getEncoder().encodeToString("CLIENT_ID:CLIENT_SECRET".getBytes()),
                    "Accept", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(
                    "&grant_type=client_credentials" ))
            .build();

    HttpResponse<?> response = client.send(httpRequest, HttpResponse.BodyHandlers.ofString());       

    return response.body().toString();
}

在 Okta 上,您需要为授权服务器创建额外的范围。该范围应该是默认的,或者如果您不想设置默认范围,则必须将其添加到正文中

.POST(HttpRequest.BodyPublishers.ofString(
                    "&grant_type=client_credentials" + 
                    "scope=SCOPE_NAME"))

关于java - 从 OKTA API 获取 token - Java(普通)示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58491442/

相关文章:

java - 想要创建一个选择模式并在单击 2 个 JPanels 后将其关闭

java - java中jmenu项的setAccelerator

java - Java(Tomcat)中HttpRequest的参数默认编码

android - 在android中创建一个代理服务器来拦截媒体播放器的请求和响应

spring-boot - 如何使 session 长度持续更长的时间?

go - 在Golang中对 map 输出进行排序和过滤-Okta API

java - 如何修改 Eclipse 自动生成的设置方法签名?

Java 正则表达式在我的系统中工作但在服务器中不工作

.net - EnsureSuccessStatusCode 的使用以及它抛出的 HttpRequestException 的处理

mysql - 您可以将 Okta 与 mysql 一起使用吗?