我试图从我们的IDM服务器中检索OAUTH2令牌 - 我已尝试了几种基本示例,但所有这些示例都返回200状态而不包含任何代码。我可以通过postman使用标题:
毫无困难地完成它set
...并发送client_id,redirect_uri和代码参数。我得到了一些看起来像这样的东西:
Content-Type application/x-www-form-urlencoded
这里的超级基本代码只是为了看看我是否可以获取令牌(此时):
{
"access_token": "abcd...",
"token_type": "bearer",
"expires_in": 3600
}
但我得到的只是:
public class Service {
public String getToken() {
String client_id = "f2e8...";
String redirect_uri = "https://mysite/";
String code = "AAAAAA...";
form = new Form();
form.param("client_id", client_id);
form.param("code", code);
form.param("redirect_uri", redirect_uri);
JerseyClientBuilder jerseyClientBuilder = new JerseyClientBuilder();
JerseyWebTarget jerseyWebTarget =
jerseyClientBuilder.build().target("https://token-source-site/");
Response response = jerseyWebTarget.request().post(Entity.form(form));
return response.toString();
}
}
关于Postman可能在做什么的任何想法,我的代码不是?
答案 0 :(得分:1)
当您在toString()
上拨打Response
时,它不会显示给回复正文。您需要通过调用Response#readEntity
来提取身体。
但即使尝试将其解压缩为String,您仍然需要解析字符串。最好的办法是为令牌响应创建一个POJO
public class AccessTokenResponse {
@JsonProperty("access_token")
private String accessToken;
@JsonProperty("token_type")
private String tokenType;
@JsonProperty("expires_in")
private long expiresIn;
// getters and setters
}
然后你可以做
Response response = jerseyWebTarget.request().post(Entity.form(form));
return response.readEntity(AccessTokenResponse.class);
使方法返回AccessTokenResponse
,以便客户端也可以访问其他属性。
为此,您需要拥有Jackson提供程序依赖
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>${jersey.version}</version>
</dependency>