Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit5e1827e

Browse files
committed
support 'password' grant_type for OAuth 2.0
1 parent9a12c76 commit5e1827e

File tree

6 files changed

+94
-119
lines changed

6 files changed

+94
-119
lines changed

‎changelog

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
* remove Verifier object, we just need Strings, 'code' for OAuth2 and 'oauthVerifier' for OAuth1
88
* default HTTP verb for OAuth 2.0 Access Token EndPoint is POST (http://tools.ietf.org/html/rfc6749#section-3.2)
99
* send missed headers in async version (as in sync)
10+
* support 'password' grant_type for OAuth 2.0
1011

1112
[2.3.0]
1213
* Stack Exchange authentication via OAuth 2.0 (stackoverflow.com, askubuntu.com, etc.).

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

Lines changed: 27 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
importcom.github.scribejava.core.model.OAuthConstants;
1414
importcom.github.scribejava.core.model.OAuthRequest;
1515
importcom.github.scribejava.core.model.OAuthRequestAsync;
16-
importcom.github.scribejava.core.model.Response;
1716
importjava.util.Map;
1817

1918
publicclassOAuth20ServiceextendsOAuthService {
@@ -33,19 +32,19 @@ public OAuth20Service(DefaultApi20 api, OAuthConfig config) {
3332
}
3433

3534
//sync version, protected to facilitate mocking
36-
protectedOAuth2AccessTokensendTokenSync(OAuthRequestrequest) {
35+
protectedOAuth2AccessTokensendAccessTokenRequestSync(OAuthRequestrequest) {
3736
returnapi.getAccessTokenExtractor().extract(request.send().getBody());
3837
}
3938

4039
//async version, protected to facilitate mocking
41-
protectedFuture<OAuth2AccessToken>sendTokenAsync(OAuthRequestAsyncrequest,
40+
protectedFuture<OAuth2AccessToken>sendAccessTokenRequestAsync(OAuthRequestAsyncrequest,
4241
OAuthAsyncRequestCallback<OAuth2AccessToken>callback,ProxyServerproxyServer) {
4342

4443
returnrequest.sendAsync(callback,newOAuthRequestAsync.ResponseConverter<OAuth2AccessToken>() {
4544
@Override
4645
publicOAuth2AccessTokenconvert(com.ning.http.client.Responseresponse)throwsIOException {
4746
returngetApi().getAccessTokenExtractor()
48-
.extract(OAuthRequestAsync.RESPONSE_CONVERTER.convert(response).getBody());
47+
.extract(OAuthRequestAsync.RESPONSE_CONVERTER.convert(response).getBody());
4948
}
5049
},proxyServer);
5150
}
@@ -54,7 +53,7 @@ public final OAuth2AccessToken getAccessToken(String code) {
5453
finalOAuthRequestrequest =createAccessTokenRequest(code,
5554
newOAuthRequest(api.getAccessTokenVerb(),api.getAccessTokenEndpoint(),this));
5655

57-
returnsendTokenSync(request);
56+
returnsendAccessTokenRequestSync(request);
5857
}
5958

6059
/**
@@ -75,7 +74,7 @@ public final Future<OAuth2AccessToken> getAccessTokenAsync(String code,
7574
finalOAuthRequestAsyncrequest =createAccessTokenRequest(code,
7675
newOAuthRequestAsync(api.getAccessTokenVerb(),api.getAccessTokenEndpoint(),this));
7776

78-
returnsendTokenAsync(request,callback,proxyServer);
77+
returnsendAccessTokenRequestAsync(request,callback,proxyServer);
7978
}
8079

8180
protected <TextendsAbstractRequest>TcreateAccessTokenRequest(Stringcode,Trequest) {
@@ -95,9 +94,9 @@ protected <T extends AbstractRequest> T createAccessTokenRequest(String code, T
9594

9695
publicfinalOAuth2AccessTokenrefreshAccessToken(StringrefreshToken) {
9796
finalOAuthRequestrequest =createRefreshTokenRequest(refreshToken,
98-
newOAuthRequest(api.getAccessTokenVerb(),api.getAccessTokenEndpoint(),this));
97+
newOAuthRequest(api.getAccessTokenVerb(),api.getAccessTokenEndpoint(),this));
9998

100-
returnsendTokenSync(request);
99+
returnsendAccessTokenRequestSync(request);
101100
}
102101

103102
publicfinalFuture<OAuth2AccessToken>refreshAccessTokenAsync(StringrefreshToken,
@@ -110,7 +109,7 @@ public final Future<OAuth2AccessToken> refreshAccessTokenAsync(String refreshTok
110109
finalOAuthRequestAsyncrequest =createRefreshTokenRequest(refreshToken,
111110
newOAuthRequestAsync(api.getAccessTokenVerb(),api.getRefreshTokenEndpoint(),this));
112111

113-
returnsendTokenAsync(request,callback,proxyServer);
112+
returnsendAccessTokenRequestAsync(request,callback,proxyServer);
114113
}
115114

116115
protected <TextendsAbstractRequest>TcreateRefreshTokenRequest(StringrefreshToken,Trequest) {
@@ -132,39 +131,36 @@ protected <T extends AbstractRequest> T createRefreshTokenRequest(String refresh
132131
* @param password User password
133132
* @return OAuth2AccessToken
134133
*/
135-
136134
publicfinalOAuth2AccessTokengetAccessTokenPasswordGrant(Stringuname,Stringpassword) {
137135
finalOAuthRequestrequest =createAccessTokenPasswordGrantRequest(uname,password,
138-
newOAuthRequest(api.getAccessTokenVerb(),api.getAccessTokenEndpoint(),this));
136+
newOAuthRequest(api.getAccessTokenVerb(),api.getAccessTokenEndpoint(),this));
139137

140-
returnsendTokenSync(request);
138+
returnsendAccessTokenRequestSync(request);
141139
}
142140

143141
/**
144-
* Request Access Token Password Grant async version
145-
*
146-
* @param uname User name
147-
* @param password User password
148-
* @param callback Optional callback
149-
* @return Future
150-
*/
142+
* Request Access Token Password Grant async version
143+
*
144+
* @param uname User name
145+
* @param password User password
146+
* @param callback Optional callback
147+
* @return Future
148+
*/
151149
publicfinalFuture<OAuth2AccessToken>getAccessTokenPasswordGrantAsync(Stringuname,Stringpassword,
152150
OAuthAsyncRequestCallback<OAuth2AccessToken>callback) {
153-
finalOAuthRequestAsyncrequest =createAccessTokenPasswordGrantRequest(uname,password,
154-
newOAuthRequestAsync(api.getAccessTokenVerb(),api.getAccessTokenEndpoint(),this));
155-
156151
returngetAccessTokenPasswordGrantAsync(uname,password,callback,null);
157152
}
158153

159154
publicfinalFuture<OAuth2AccessToken>getAccessTokenPasswordGrantAsync(Stringuname,Stringpassword,
160155
OAuthAsyncRequestCallback<OAuth2AccessToken>callback,ProxyServerproxyServer) {
161156
finalOAuthRequestAsyncrequest =createAccessTokenPasswordGrantRequest(uname,password,
162-
newOAuthRequestAsync(api.getAccessTokenVerb(),api.getAccessTokenEndpoint(),this));
157+
newOAuthRequestAsync(api.getAccessTokenVerb(),api.getAccessTokenEndpoint(),this));
163158

164-
returnsendTokenAsync(request,callback,proxyServer);
159+
returnsendAccessTokenRequestAsync(request,callback,proxyServer);
165160
}
166161

167-
protected <TextendsAbstractRequest>TcreateAccessTokenPasswordGrantRequest(Stringusername,Stringpassword,Trequest) {
162+
protected <TextendsAbstractRequest>TcreateAccessTokenPasswordGrantRequest(Stringusername,Stringpassword,
163+
Trequest) {
168164
finalOAuthConfigconfig =getConfig();
169165
request.addParameter(OAuthConstants.USERNAME,username);
170166
request.addParameter(OAuthConstants.PASSWORD,password);
@@ -175,12 +171,12 @@ protected <T extends AbstractRequest> T createAccessTokenPasswordGrantRequest(St
175171

176172
request.addParameter(OAuthConstants.GRANT_TYPE,OAuthConstants.PASSWORD);
177173

178-
request.addHeader(OAuthConstants.HEADER,OAuthConstants.BASIC +" " +
179-
Base64Encoder.getInstance().encode(
180-
String.format("%s:%s",config.getApiKey(),config.getApiSecret()).getBytes(
181-
Charset.forName("UTF-8")
182-
)
183-
)
174+
request.addHeader(OAuthConstants.HEADER,OAuthConstants.BASIC +" "
175+
+Base64Encoder.getInstance().encode(
176+
String.format("%s:%s",config.getApiKey(),config.getApiSecret()).getBytes(
177+
Charset.forName("UTF-8")
178+
)
179+
)
184180
);
185181

186182
returnrequest;

‎scribejava-core/src/test/java/com/github/scribejava/core/oauth/CompletedFuture.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
11
packagecom.github.scribejava.core.oauth;
22

3-
importjava.util.concurrent.ExecutionException;
43
importjava.util.concurrent.Future;
54
importjava.util.concurrent.TimeUnit;
6-
importjava.util.concurrent.TimeoutException;
75

8-
/**
9-
*/
106
classCompletedFuture<V>implementsFuture<V> {
117
privatefinalVresult;
128

13-
publicCompletedFuture(Vresult) {
9+
CompletedFuture(Vresult) {
1410
this.result =result;
1511
}
1612

@@ -30,14 +26,12 @@ public boolean isDone() {
3026
}
3127

3228
@Override
33-
publicVget()throwsInterruptedException,ExecutionException{
29+
publicVget() {
3430
returnresult;
3531
}
3632

3733
@Override
38-
publicVget(longtimeout,TimeUnitunit)throwsInterruptedException,ExecutionException,
39-
TimeoutException {
40-
34+
publicVget(longtimeout,TimeUnitunit) {
4135
returnresult;
4236
}
4337
}

‎scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ApiUnit.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@
33
importcom.github.scribejava.core.builder.api.DefaultApi20;
44
importcom.github.scribejava.core.model.OAuthConfig;
55

6-
/**
7-
*/
86
classOAuth20ApiUnitextendsDefaultApi20 {
7+
98
@Override
109
publicStringgetAccessTokenEndpoint() {
1110
return"http://localhost:8080/token";
@@ -16,6 +15,7 @@ public String getAuthorizationUrl(OAuthConfig config) {
1615
return"http://localhost:8080/authorize";
1716
}
1817

18+
@Override
1919
publicOAuth20ServicecreateService(OAuthConfigconfig) {
2020
returnnewOAuth20ServiceUnit(this,config);
2121
}

‎scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceTest.java

Lines changed: 26 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -13,34 +13,29 @@
1313
importjava.util.Map;
1414
importjava.util.concurrent.ExecutionException;
1515

16-
/**
17-
*/
1816
publicclassOAuth20ServiceTest {
1917

2018
@Test
2119
publicvoidshouldProduceCorrectRequestSync() {
2220
finalOAuth20Serviceservice =newServiceBuilder()
23-
.apiKey("your_api_key")
24-
.apiSecret("your_api_secret")
25-
.build(newOAuth20ApiUnit());
21+
.apiKey("your_api_key")
22+
.apiSecret("your_api_secret")
23+
.build(newOAuth20ApiUnit());
2624

2725
finalOAuth2AccessTokentoken =service.getAccessTokenPasswordGrant("user1","password1");
2826
finalGsonjson =newGson();
2927

3028
Assert.assertNotNull(token);
3129

32-
Map<String,String>map =json.fromJson(token.getRawResponse(),
33-
newTypeToken<Map<String,String>>(){}.getType());
30+
finalMap<String,String>map =json.fromJson(token.getRawResponse(),newTypeTokenImpl().getType());
3431

35-
Assert.assertEquals(OAuth20ServiceUnit.token,map.get(OAuthConstants.ACCESS_TOKEN));
36-
Assert.assertEquals(OAuth20ServiceUnit.state,map.get(OAuthConstants.STATE));
37-
Assert.assertEquals(OAuth20ServiceUnit.expires,map.get("expires_in"));
32+
Assert.assertEquals(OAuth20ServiceUnit.TOKEN,map.get(OAuthConstants.ACCESS_TOKEN));
33+
Assert.assertEquals(OAuth20ServiceUnit.STATE,map.get(OAuthConstants.STATE));
34+
Assert.assertEquals(OAuth20ServiceUnit.EXPIRES,map.get("expires_in"));
3835

39-
finalStringauthorize =Base64Encoder.getInstance().encode(
40-
String.format("%s:%s",service.getConfig().getApiKey(),service.getConfig().getApiSecret()).getBytes(
41-
Charset.forName("UTF-8")
42-
)
43-
);
36+
finalStringauthorize =Base64Encoder.getInstance()
37+
.encode(String.format("%s:%s",service.getConfig().getApiKey(),service.getConfig().getApiSecret())
38+
.getBytes(Charset.forName("UTF-8")));
4439

4540
Assert.assertEquals(OAuthConstants.BASIC +" " +authorize,map.get(OAuthConstants.HEADER));
4641

@@ -52,27 +47,24 @@ public void shouldProduceCorrectRequestSync() {
5247
@Test
5348
publicvoidshouldProduceCorrectRequestAsync()throwsExecutionException,InterruptedException {
5449
finalOAuth20Serviceservice =newServiceBuilder()
55-
.apiKey("your_api_key")
56-
.apiSecret("your_api_secret")
57-
.build(newOAuth20ApiUnit());
50+
.apiKey("your_api_key")
51+
.apiSecret("your_api_secret")
52+
.build(newOAuth20ApiUnit());
5853

5954
finalOAuth2AccessTokentoken =service.getAccessTokenPasswordGrantAsync("user1","password1",null).get();
6055
finalGsonjson =newGson();
6156

6257
Assert.assertNotNull(token);
6358

64-
Map<String,String>map =json.fromJson(token.getRawResponse(),
65-
newTypeToken<Map<String,String>>(){}.getType());
59+
finalMap<String,String>map =json.fromJson(token.getRawResponse(),newTypeTokenImpl().getType());
6660

67-
Assert.assertEquals(OAuth20ServiceUnit.token,map.get(OAuthConstants.ACCESS_TOKEN));
68-
Assert.assertEquals(OAuth20ServiceUnit.state,map.get(OAuthConstants.STATE));
69-
Assert.assertEquals(OAuth20ServiceUnit.expires,map.get("expires_in"));
61+
Assert.assertEquals(OAuth20ServiceUnit.TOKEN,map.get(OAuthConstants.ACCESS_TOKEN));
62+
Assert.assertEquals(OAuth20ServiceUnit.STATE,map.get(OAuthConstants.STATE));
63+
Assert.assertEquals(OAuth20ServiceUnit.EXPIRES,map.get("expires_in"));
7064

71-
finalStringauthorize =Base64Encoder.getInstance().encode(
72-
String.format("%s:%s",service.getConfig().getApiKey(),service.getConfig().getApiSecret()).getBytes(
73-
Charset.forName("UTF-8")
74-
)
75-
);
65+
finalStringauthorize =Base64Encoder.getInstance()
66+
.encode(String.format("%s:%s",service.getConfig().getApiKey(),service.getConfig().getApiSecret())
67+
.getBytes(Charset.forName("UTF-8")));
7668

7769
Assert.assertEquals(OAuthConstants.BASIC +" " +authorize,map.get(OAuthConstants.HEADER));
7870

@@ -81,4 +73,10 @@ public void shouldProduceCorrectRequestAsync() throws ExecutionException, Interr
8173
Assert.assertEquals("password",map.get("query-grant_type"));
8274
}
8375

76+
privatestaticclassTypeTokenImplextendsTypeToken<Map<String,String>> {
77+
78+
privateTypeTokenImpl() {
79+
}
80+
}
81+
8482
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp