无效的Identity Server令牌

时间:2017-08-13 21:47:37

标签: java c# oauth-2.0 access-token identityserver4

我创建了一个包含4个主要应用程序的系统:

  • 身份服务器(C#)
  • 网络应用程序(angular,TS,JS)
  • 服务器端应用程序(Java)
  • API(C#)

Web应用程序验证正常,令牌可以像处理一样处理并允许访问API,但服务器端应用程序并不是。令牌似乎是正确生成的,但是当它们被添加到请求标头并被分派时,它们只会返回401错误。

如果我通过邮递员生成令牌,它们可以正常工作,但是当我通过java应用程序生成它们时,它们不能正常工作。而且,它们似乎有不同的长度。

java应用程序使用客户端凭据流来获取令牌,并按以下方式实现:

String strBody;
try {
    strBody = "client_id=" + id + "&client_secret=" + URLEncoder.encode(secret, "UTF-8") + "&grant_type=client_credentials&scope=" + scope;
} catch (UnsupportedEncodingException e) {
    Logger.severe("Failed to get encode client secret with error: " + e.getMessage());
    ((CompletableFuture)accessToken).completeExceptionally(new Exception("Failed to get encode client secret with error: " + e.getMessage()));
    return null;
}
RequestBody body = RequestBody.create(MediaType.parse("application/x-www-form-urlencoded; charset=utf-8"), strBody);
Request request = new Request.Builder().url(url).post(body).build();
String strResponse = executeRequest(request);
Logger.info("got token response: "+strResponse);
TokenResponse response = (new Gson()).fromJson(strResponse, TokenResponse.class);
if (response.getError() != null && response.getError().length() > 0) {
    Logger.severe("Failed to get access token with error: " + response.getError());
    ((CompletableFuture)accessToken).completeExceptionally(new Exception("Failed to get access token with error: " + response.getError()));
} else {
    Timers.runIn((timer, thing) -> clientCreditentalFlow(), response.getExpiresIn() - 10, TimeUnit.SECONDS);
    Logger.info("token: "+accessToken);
    ((CompletableFuture)accessToken).complete(response.getAccessToken());
}

当我从post man发送完全相同的细节时,它返回一个工作令牌,虽然长度不同。

Web应用程序使用隐式工作流,而不是使用客户端凭据流的Java应用程序。

0 个答案:

没有答案