簡體   English   中英

獲取OAUTH2令牌

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM