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