OAuth1 支持:使用 Jersey 2.x 签署请求

问题描述 投票:0回答:0

我们目前正在从 Jersey 1.19 迁移到 Jersey 2.39。 我们的项目依赖于使用 OAuth1 签署请求而不使用授权流程,这主要是因为客户端和服务器事先都知道令牌。我们曾经能够使用 Jersey 1.19 签署我们的请求,如下所示:

WebResource webResource = client.resource(url);
OAuthSecrets secrets = new OAuthSecrets().consumerSecret(oAuthSecret);
OAuthParameters params = new OAuthParameters().consumerKey(oAthKey)
.signatureMethod(HMAC_SHA1.NAME)
.version("1.0")
.nonce("")
.token(oAthKey);
OAuthClientFilter oauthFilter = new OAuthClientFilter(client.getProviders(), params, secrets);
webResource.addFilter(oauthFilter);

为上述代码生成的

Authorization
标头将如下所示:

Authorization: OAuth oauth_nonce="", oauth_signature="B2U84fm97Jn9ZdQgIOCvh2MiNOA%3D", oauth_token="key", oauth_consumer_key="key", oauth_signature_method="HMAC-SHA1", oauth_version="1.0", oauth_timestamp="1679930999"

现在我们正在迁移到 Jersey 2.x,我们正在尝试添加

Authorization
标头,但使用以下代码:

Client client = ClientBuilder.newClient();
ConsumerCredentials consumerCredentials = new ConsumerCredentials("key", "secret");
Feature oAuth1Feature = OAuth1ClientSupport.builder(consumerCredentials)
.signatureMethod("HMAC-SHA1")
.version("1.0")
.nonce("")
.feature()
.accessToken(new AccessToken("key",""))
.build();
client.register(oAuth1Feature);

为 Jersey 2.x 代码生成的

Authorization
标头如下所示:

Authorization: OAuth oauth_nonce="", oauth_signature="oiPBj0qOQiXFmHw%2B306wnJGoAqk%3D", oauth_callback="oob", oauth_token="key", oauth_consumer_key="key", oauth_signature_method="HMAC-SHA1", oauth_version="1.0", oauth_timestamp="1679931284"

我们注意到 Jersey 2.x 将

oauth_callback="oob"
添加到
Authorization
标头,我们几乎可以肯定它会影响
oauth_signature
值,导致我们对服务器的 HTTP 请求因授权问题而失败(HTTP 403).

问题是:是否可以从

oauth_callback="oob"
标题中删除
Authorization

rest jersey-2.0 jersey-client
© www.soinside.com 2019 - 2024. All rights reserved.