[英]Getting the OAUTH2 Token
我正在嘗試從我們的IDM服務器中檢索OAUTH2令牌-我嘗試了幾種基本示例,但所有示例均返回200狀態,不包含任何代碼。 我可以通過郵遞員使用以下標頭來毫無問題地做到這一點:
Content-Type application/x-www-form-urlencoded
...並發送client_id,redirect_uri和代碼參數。 我得到的東西看起來像這樣:
{
"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();
}
}
但是我得到的只是:
InboundJaxrsResponse{context=ClientResponse{method=POST,
uri=https://token-source-site/, status=200, reason=OK}}
關於Postman可能在做什么,我的代碼不是嗎?
當您在Response
上調用toString()
時,它不會顯示在響應主體上。 您需要通過調用Response#readEntity
從其中提取主體。
但是,即使嘗試將其提取為字符串,您仍然有必須解析字符串的問題。 最好的辦法是為令牌響應創建一個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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.