Skip to content

Commit 5237697

Browse files
committed
Adds support for retrieving an access token using client-credentials grant.
1 parent 9ae56fd commit 5237697

File tree

2 files changed

+55
-13
lines changed

2 files changed

+55
-13
lines changed

scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public interface OAuthConstants {
3232
String REFRESH_TOKEN = "refresh_token";
3333
String GRANT_TYPE = "grant_type";
3434
String AUTHORIZATION_CODE = "authorization_code";
35+
String CLIENT_CREDENTIALS = "client_credentials";
3536
String STATE = "state";
3637
String USERNAME = "username";
3738
String PASSWORD = "password";

scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java

Lines changed: 54 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -92,37 +92,44 @@ protected OAuthRequest createAccessTokenRequest(String code) {
9292
return request;
9393
}
9494

95-
public final Future<OAuth2AccessToken> refreshAccessTokenAsync(String refreshToken) {
96-
return refreshAccessToken(refreshToken, null);
95+
public final Future<OAuth2AccessToken> getAccessTokenClientCredentialsGrantAsync() {
96+
return getAccessTokenClientCredentialsGrant(null);
9797
}
9898

99-
public final OAuth2AccessToken refreshAccessToken(String refreshToken)
99+
public final OAuth2AccessToken getAccessTokenClientCredentialsGrant()
100100
throws IOException, InterruptedException, ExecutionException {
101-
final OAuthRequest request = createRefreshTokenRequest(refreshToken);
101+
final OAuthRequest request = createAccessTokenClientCredentialsGrantRequest();
102102

103103
return sendAccessTokenRequestSync(request);
104104
}
105105

106-
public final Future<OAuth2AccessToken> refreshAccessToken(String refreshToken,
106+
/**
107+
* Start the request to retrieve the access token using client-credentials grant. The optionally provided callback
108+
* will be called with the Token when it is available.
109+
*
110+
* @param callback optional callback
111+
* @return Future
112+
*/
113+
public final Future<OAuth2AccessToken> getAccessTokenClientCredentialsGrant(
107114
OAuthAsyncRequestCallback<OAuth2AccessToken> callback) {
108-
final OAuthRequest request = createRefreshTokenRequest(refreshToken);
115+
final OAuthRequest request = createAccessTokenClientCredentialsGrantRequest();
109116

110117
return sendAccessTokenRequestAsync(request, callback);
111118
}
112119

113-
protected OAuthRequest createRefreshTokenRequest(String refreshToken) {
114-
if (refreshToken == null || refreshToken.isEmpty()) {
115-
throw new IllegalArgumentException("The refreshToken cannot be null or empty");
116-
}
117-
final OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getRefreshTokenEndpoint());
120+
protected OAuthRequest createAccessTokenClientCredentialsGrantRequest() {
121+
final OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint());
118122
final OAuthConfig config = getConfig();
119123
request.addParameter(OAuthConstants.CLIENT_ID, config.getApiKey());
120124
final String apiSecret = config.getApiSecret();
121125
if (apiSecret != null) {
122126
request.addParameter(OAuthConstants.CLIENT_SECRET, apiSecret);
123127
}
124-
request.addParameter(OAuthConstants.REFRESH_TOKEN, refreshToken);
125-
request.addParameter(OAuthConstants.GRANT_TYPE, OAuthConstants.REFRESH_TOKEN);
128+
final String scope = config.getScope();
129+
if (scope != null) {
130+
request.addParameter(OAuthConstants.SCOPE, scope);
131+
}
132+
request.addParameter(OAuthConstants.GRANT_TYPE, OAuthConstants.CLIENT_CREDENTIALS);
126133
return request;
127134
}
128135

@@ -177,6 +184,40 @@ protected OAuthRequest createAccessTokenPasswordGrantRequest(String username, St
177184
return request;
178185
}
179186

187+
public final Future<OAuth2AccessToken> refreshAccessTokenAsync(String refreshToken) {
188+
return refreshAccessToken(refreshToken, null);
189+
}
190+
191+
public final OAuth2AccessToken refreshAccessToken(String refreshToken)
192+
throws IOException, InterruptedException, ExecutionException {
193+
final OAuthRequest request = createRefreshTokenRequest(refreshToken);
194+
195+
return sendAccessTokenRequestSync(request);
196+
}
197+
198+
public final Future<OAuth2AccessToken> refreshAccessToken(String refreshToken,
199+
OAuthAsyncRequestCallback<OAuth2AccessToken> callback) {
200+
final OAuthRequest request = createRefreshTokenRequest(refreshToken);
201+
202+
return sendAccessTokenRequestAsync(request, callback);
203+
}
204+
205+
protected OAuthRequest createRefreshTokenRequest(String refreshToken) {
206+
if (refreshToken == null || refreshToken.isEmpty()) {
207+
throw new IllegalArgumentException("The refreshToken cannot be null or empty");
208+
}
209+
final OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getRefreshTokenEndpoint());
210+
final OAuthConfig config = getConfig();
211+
request.addParameter(OAuthConstants.CLIENT_ID, config.getApiKey());
212+
final String apiSecret = config.getApiSecret();
213+
if (apiSecret != null) {
214+
request.addParameter(OAuthConstants.CLIENT_SECRET, apiSecret);
215+
}
216+
request.addParameter(OAuthConstants.REFRESH_TOKEN, refreshToken);
217+
request.addParameter(OAuthConstants.GRANT_TYPE, OAuthConstants.REFRESH_TOKEN);
218+
return request;
219+
}
220+
180221
/**
181222
* {@inheritDoc}
182223
*/

0 commit comments

Comments
 (0)