获取OAUTH2令牌

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取OAUTH2令牌相关的知识,希望对你有一定的参考价值。

我正在尝试从我们的IDM服务器中检索OAUTH2令牌 - 我尝试了几种基本示例,但所有这些示例都返回200状态,不包含任何代码。我可以通过postman使用标题:

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可能在做什么的任何想法,我的代码不是?

答案

当你在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>

以上是关于获取OAUTH2令牌的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security Oauth2 客户端获取访问令牌失败,请求代码无效=415,消息=不支持的媒体类型

oAuth2.0:为啥需要“授权码”,然后才需要令牌?

OAuth2:查询字符串与片段

无法在Angular / SpringBoot应用程序中获取OAuth2令牌

用户在springboot中调用注册休息API时如何获取oAuth2访问令牌?

未从 ADFS 3.0 获取用于 OAuth2 访问令牌的 JWT 中的用户身份