我已在 OKTA 环境中创建了一个帐户 here 。 我在网上搜索,但找不到任何有关如何从 OKTA API 获取访问 token 的示例。我正在寻找一些“普通”Java 代码的示例。但如果任何 SDK 中有什么东西,我会很高兴。 我尝试创建一个到 /token 端点的 HTTP 请求 (POST)。我在正文中使用了 client_id 和 client_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/