[SCB-1365]add database implementations for OpenIDStore
diff --git a/api/authentication-server/endpoint/src/main/java/org/apache/servicecomb/authentication/server/GithubTokenGranter.java b/api/authentication-server/endpoint/src/main/java/org/apache/servicecomb/authentication/server/GithubTokenGranter.java
index 2840840..d8ed4ac 100644
--- a/api/authentication-server/endpoint/src/main/java/org/apache/servicecomb/authentication/server/GithubTokenGranter.java
+++ b/api/authentication-server/endpoint/src/main/java/org/apache/servicecomb/authentication/server/GithubTokenGranter.java
@@ -73,7 +73,7 @@
}
@Override
- public TokenResponse grant(String code, String state, String login) {
+ public OpenIDToken grant(String code, String state, String login) {
GithubAccessTokenResponse response = null;
try {
HttpHeaders headers = new HttpHeaders();
@@ -107,7 +107,7 @@
response);
openIDTokenStore.saveToken(openIDToken);
- return TokenResponse.fromOpenIDToken(openIDToken);
+ return openIDToken;
} catch (UsernameNotFoundException e) {
return null;
}
diff --git a/api/authentication-server/endpoint/src/main/java/org/apache/servicecomb/authentication/server/PasswordTokenGranter.java b/api/authentication-server/endpoint/src/main/java/org/apache/servicecomb/authentication/server/PasswordTokenGranter.java
index bb32d48..5740bc0 100644
--- a/api/authentication-server/endpoint/src/main/java/org/apache/servicecomb/authentication/server/PasswordTokenGranter.java
+++ b/api/authentication-server/endpoint/src/main/java/org/apache/servicecomb/authentication/server/PasswordTokenGranter.java
@@ -48,7 +48,7 @@
private AbstractOpenIDTokenStore openIDTokenStore;
@Override
- public TokenResponse grant(Map<String, String> parameters) {
+ public OpenIDToken grant(Map<String, String> parameters) {
String username = parameters.get(AuthenticationServerConstants.PARAM_USERNAME);
String password = parameters.get(AuthenticationServerConstants.PARAM_PASSWORD);
@@ -61,7 +61,7 @@
if (passwordEncoder.matches(password, userDetails.getPassword())) {
OpenIDToken openIDToken = openIDTokenStore.createToken(userDetails);
openIDTokenStore.saveToken(openIDToken);
- return TokenResponse.fromOpenIDToken(openIDToken);
+ return openIDToken;
} else {
return null;
}
diff --git a/api/authentication-server/endpoint/src/main/java/org/apache/servicecomb/authentication/server/RefreshTokenTokenGranter.java b/api/authentication-server/endpoint/src/main/java/org/apache/servicecomb/authentication/server/RefreshTokenTokenGranter.java
index a18bd2d..9204dc3 100644
--- a/api/authentication-server/endpoint/src/main/java/org/apache/servicecomb/authentication/server/RefreshTokenTokenGranter.java
+++ b/api/authentication-server/endpoint/src/main/java/org/apache/servicecomb/authentication/server/RefreshTokenTokenGranter.java
@@ -55,7 +55,7 @@
}
@Override
- public TokenResponse grant(Map<String, String> parameters) {
+ public OpenIDToken grant(Map<String, String> parameters) {
String refreshTokenValue = parameters.get(AuthenticationServerConstants.PARAM_REFRESH_TOKEN);
if (StringUtils.isEmpty(refreshTokenValue)) {
@@ -65,10 +65,10 @@
Token refreshToken = openIDTokenStore.readTokenByRefreshTokenValue(refreshTokenValue);
if (refreshToken != null && !refreshToken.isExpired()) {
- UserDetails userDetails = userDetailsService.loadUserByUsername(refreshToken.username());
+ UserDetails userDetails = userDetailsService.loadUserByUsername(refreshToken.getUsername());
OpenIDToken openIDToken = openIDTokenStore.createToken(userDetails);
openIDTokenStore.saveToken(openIDToken);
- return TokenResponse.fromOpenIDToken(openIDToken);
+ return openIDToken;
}
return null;
}
diff --git a/api/authentication-server/endpoint/src/main/java/org/apache/servicecomb/authentication/server/ThirdPartyTokenGranter.java b/api/authentication-server/endpoint/src/main/java/org/apache/servicecomb/authentication/server/ThirdPartyTokenGranter.java
index 1ef4fc8..788d31b 100644
--- a/api/authentication-server/endpoint/src/main/java/org/apache/servicecomb/authentication/server/ThirdPartyTokenGranter.java
+++ b/api/authentication-server/endpoint/src/main/java/org/apache/servicecomb/authentication/server/ThirdPartyTokenGranter.java
@@ -20,6 +20,7 @@
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
+import org.apache.servicecomb.authentication.token.OpenIDToken;
public interface ThirdPartyTokenGranter extends TokenGranter {
@@ -29,7 +30,7 @@
}
@Override
- default TokenResponse grant(Map<String, String> parameters) {
+ default OpenIDToken grant(Map<String, String> parameters) {
String provider = parameters.get(AuthenticationServerConstants.PARAM_PROVIDER);
String code = parameters.get(AuthenticationServerConstants.PARAM_CODE);
String state = parameters.get(AuthenticationServerConstants.PARAM_STATE);
@@ -49,7 +50,7 @@
String name();
- TokenResponse grant(String code, String state, String login);
+ OpenIDToken grant(String code, String state, String login);
/**
* In authorization code mode, need to get authentication provider information first.
diff --git a/api/authentication-server/endpoint/src/main/java/org/apache/servicecomb/authentication/server/TokenEndpoint.java b/api/authentication-server/endpoint/src/main/java/org/apache/servicecomb/authentication/server/TokenEndpoint.java
index fb849c1..bd7f8d8 100644
--- a/api/authentication-server/endpoint/src/main/java/org/apache/servicecomb/authentication/server/TokenEndpoint.java
+++ b/api/authentication-server/endpoint/src/main/java/org/apache/servicecomb/authentication/server/TokenEndpoint.java
@@ -22,6 +22,7 @@
import javax.ws.rs.core.MediaType;
+import org.apache.servicecomb.authentication.token.OpenIDToken;
import org.apache.servicecomb.provider.rest.common.RestSchema;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
@@ -36,12 +37,12 @@
@Override
@PostMapping(path = "/", consumes = MediaType.APPLICATION_FORM_URLENCODED)
- public TokenResponse getToken(@RequestBody Map<String, String> parameters) {
+ public OpenIDToken getToken(@RequestBody Map<String, String> parameters) {
String grantType = parameters.get(AuthenticationServerConstants.PARAM_GRANT_TYPE);
for (TokenGranter granter : granters) {
if (granter.enabled()) {
- TokenResponse token = granter.grant(grantType, parameters);
+ OpenIDToken token = granter.grant(grantType, parameters);
if (token != null) {
return token;
}
diff --git a/api/authentication-server/endpoint/src/main/java/org/apache/servicecomb/authentication/server/TokenGranter.java b/api/authentication-server/endpoint/src/main/java/org/apache/servicecomb/authentication/server/TokenGranter.java
index e5f600b..701958c 100644
--- a/api/authentication-server/endpoint/src/main/java/org/apache/servicecomb/authentication/server/TokenGranter.java
+++ b/api/authentication-server/endpoint/src/main/java/org/apache/servicecomb/authentication/server/TokenGranter.java
@@ -19,6 +19,8 @@
import java.util.Map;
+import org.apache.servicecomb.authentication.token.OpenIDToken;
+
/**
* Token granter is used to grant access tokens.
* @author Administrator
@@ -29,12 +31,12 @@
String grantType();
- default TokenResponse grant(String grantType, Map<String, String> parameters) {
+ default OpenIDToken grant(String grantType, Map<String, String> parameters) {
if (grantType().equals(grantType)) {
return grant(parameters);
}
return null;
}
- TokenResponse grant(Map<String, String> parameters);
+ OpenIDToken grant(Map<String, String> parameters);
}
diff --git a/api/authentication-server/service/src/main/java/org/apache/servicecomb/authentication/server/TokenService.java b/api/authentication-server/service/src/main/java/org/apache/servicecomb/authentication/server/TokenService.java
index 8dbd197..140ef61 100644
--- a/api/authentication-server/service/src/main/java/org/apache/servicecomb/authentication/server/TokenService.java
+++ b/api/authentication-server/service/src/main/java/org/apache/servicecomb/authentication/server/TokenService.java
@@ -19,6 +19,8 @@
import java.util.Map;
+import org.apache.servicecomb.authentication.token.OpenIDToken;
+
public interface TokenService {
- TokenResponse getToken(Map<String, String> parameters);
+ OpenIDToken getToken(Map<String, String> parameters);
}
diff --git a/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/InMemoryOpenIDTokenStore.java b/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/InMemoryOpenIDTokenStore.java
index 1a09f58..341f8fd 100644
--- a/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/InMemoryOpenIDTokenStore.java
+++ b/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/InMemoryOpenIDTokenStore.java
@@ -41,11 +41,6 @@
}
@Override
- public OpenIDToken readTokenByIDTokenValue(String idTokenValue) {
- return TOKENS_BY_ID_TOKEN_VALUE.get(idTokenValue);
- }
-
- @Override
public void saveToken(OpenIDToken token) {
TOKENS.put(token.getValue(), token);
TOKENS_BY_REFRESH_TOKEN_VALUE.put(token.getRefreshToken().getValue(), token);
diff --git a/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/JWTToken.java b/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/JWTToken.java
index a4c6750..2ab1183 100644
--- a/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/JWTToken.java
+++ b/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/JWTToken.java
@@ -17,8 +17,78 @@
package org.apache.servicecomb.authentication.token;
-import org.apache.servicecomb.authentication.jwt.JWTClaims;
+import java.util.Map;
-public interface JWTToken extends Token {
- public JWTClaims getClaims();
+import org.apache.servicecomb.authentication.jwt.JWTClaims;
+import org.apache.servicecomb.authentication.jwt.JsonParser;
+import org.springframework.security.jwt.Jwt;
+import org.springframework.security.jwt.JwtHelper;
+import org.springframework.security.jwt.crypto.sign.Signer;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+
+public class JWTToken implements Token {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 8234764050908891544L;
+
+ private JWTClaims claims;
+
+ private String value;
+
+ public JWTToken() {
+
+ }
+
+ public JWTToken(JWTClaims claims, Signer signer) {
+ this.claims = claims;
+ String content = JsonParser.unparse(claims);
+ Jwt jwtToken = JwtHelper.encode(content, signer);
+ this.value = jwtToken.getEncoded();
+ }
+
+ @Override
+ @JsonIgnore
+ public long getIssueAt() {
+ return this.claims.getIat();
+ }
+
+ @Override
+ @JsonIgnore
+ public long getExpiresIn() {
+ return this.claims.getExp();
+ }
+
+ @Override
+ @JsonIgnore
+ public long getNotBefore() {
+ return this.claims.getNbf();
+ }
+
+ @Override
+ public String getValue() {
+ return this.value;
+ }
+
+ @Override
+ public Map<String, Object> getAdditionalInformation() {
+ return this.claims.getAdditionalInformation();
+ }
+
+ @Override
+ @JsonIgnore
+ public String getUsername() {
+ return this.claims.getSub();
+ }
+
+ public JWTClaims getClaims() {
+ return this.claims;
+ }
+
+ @Override
+ public void addAdditionalInformation(String key, Object value) {
+ this.claims.addAdditionalInformation(key, value);
+ }
}
diff --git a/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/JWTTokenImpl.java b/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/JWTTokenImpl.java
deleted file mode 100644
index 1c8c133..0000000
--- a/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/JWTTokenImpl.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.servicecomb.authentication.token;
-
-import java.util.Map;
-
-import org.apache.servicecomb.authentication.jwt.JWTClaims;
-import org.apache.servicecomb.authentication.jwt.JsonParser;
-import org.springframework.security.jwt.Jwt;
-import org.springframework.security.jwt.JwtHelper;
-import org.springframework.security.jwt.crypto.sign.Signer;
-
-public class JWTTokenImpl implements JWTToken {
- private JWTClaims claims;
-
- private boolean valueCalculated = false;
-
- private String value;
-
- private Signer signer;
-
- public JWTTokenImpl(JWTClaims claims, Signer signer) {
- this.claims = claims;
- this.signer = signer;
- }
-
- @Override
- public long getIssueAt() {
- return this.claims.getIat();
- }
-
- @Override
- public long getExpiresIn() {
- return this.claims.getExp();
- }
-
- @Override
- public long getNotBefore() {
- return this.claims.getNbf();
- }
-
- @Override
- public String getValue() {
- if (!this.valueCalculated) {
- String content = JsonParser.unparse(claims);
- Jwt jwtToken = JwtHelper.encode(content, signer);
- this.value = jwtToken.getEncoded();
- }
- return this.value;
- }
-
- @Override
- public Map<String, Object> getAdditionalInformation() {
- return this.claims.getAdditionalInformation();
- }
-
- @Override
- public String username() {
- return this.claims.getSub();
- }
-
- public JWTClaims getClaims() {
- return this.claims;
- }
-
- @Override
- public void addAdditionalInformation(String key, Object value) {
- this.claims.addAdditionalInformation(key, value);
- }
-}
diff --git a/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/JWTTokenStoreImpl.java b/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/JWTTokenStoreImpl.java
index 5b74496..59dd6c7 100644
--- a/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/JWTTokenStoreImpl.java
+++ b/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/JWTTokenStoreImpl.java
@@ -52,7 +52,7 @@
claims.setNbf(config.notBefore);
// Maybe some other properties in future
- return new JWTTokenImpl(claims, signer);
+ return new JWTToken(claims, signer);
}
public JWTToken createTokenByValue(String value) {
@@ -64,6 +64,6 @@
} catch (Exception e) {
return null;
}
- return new JWTTokenImpl(claims, signer);
+ return new JWTToken(claims, signer);
}
}
diff --git a/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/OpenIDToken.java b/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/OpenIDToken.java
index d82b663..c6fc36f 100644
--- a/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/OpenIDToken.java
+++ b/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/OpenIDToken.java
@@ -20,7 +20,14 @@
import java.util.Map;
import java.util.Set;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
public class OpenIDToken implements Token {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 6252768307298115467L;
+
private String tokenType;
private SessionToken accessToken;
@@ -72,41 +79,49 @@
}
@Override
- public String username() {
- return accessToken.username();
+ @JsonIgnore
+ public String getUsername() {
+ return accessToken.getUsername();
}
@Override
+ @JsonIgnore
public boolean isExpired() {
return accessToken.isExpired();
}
@Override
+ @JsonIgnore
public long getIssueAt() {
return accessToken.getIssueAt();
}
@Override
+ @JsonIgnore
public long getExpiresIn() {
return accessToken.getExpiresIn();
}
@Override
+ @JsonIgnore
public long getNotBefore() {
return accessToken.getNotBefore();
}
@Override
+ @JsonIgnore
public String getValue() {
return accessToken.getValue();
}
@Override
+ @JsonIgnore
public Map<String, Object> getAdditionalInformation() {
return accessToken.getAdditionalInformation();
}
@Override
+ @JsonIgnore
public void addAdditionalInformation(String key, Object value) {
accessToken.addAdditionalInformation(key, value);
}
diff --git a/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/OpenIDTokenStore.java b/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/OpenIDTokenStore.java
index cd65ead..4fdf6a2 100644
--- a/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/OpenIDTokenStore.java
+++ b/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/OpenIDTokenStore.java
@@ -23,8 +23,6 @@
OpenIDToken readTokenByRefreshTokenValue(String refreshTokenValue);
- OpenIDToken readTokenByIDTokenValue(String idTokenValue);
-
JWTToken createIDTokenByValue(String jwtTokenValue);
void saveToken(OpenIDToken token);
diff --git a/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/SessionToken.java b/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/SessionToken.java
index c39cec4..7050843 100644
--- a/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/SessionToken.java
+++ b/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/SessionToken.java
@@ -17,5 +17,73 @@
package org.apache.servicecomb.authentication.token;
-public interface SessionToken extends Token {
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+public class SessionToken implements Token {
+ private static final long serialVersionUID = -7783398248936167939L;
+
+ private String value;
+
+ private long issueAt;
+
+ private long expiresIn;
+
+ private long notBefore;
+
+ private String username;
+
+ private Map<String, Object> additionalInformation;
+
+ public SessionToken() {
+
+ }
+
+ public SessionToken(String username) {
+ this.value = UUID.randomUUID().toString();
+ this.issueAt = System.currentTimeMillis();
+ this.username = username;
+ TokenDynamicProperties config = TokenDynamicPropertiesManager.getTokenConfiguration(username);
+ this.expiresIn = config.expiresIn;
+ this.notBefore = config.notBefore;
+ }
+
+ @Override
+ public long getIssueAt() {
+ return this.issueAt;
+ }
+
+ @Override
+ public long getExpiresIn() {
+ return this.expiresIn;
+ }
+
+ @Override
+ public long getNotBefore() {
+ return this.notBefore;
+ }
+
+ @Override
+ public String getValue() {
+ return this.value;
+ }
+
+ @Override
+ public Map<String, Object> getAdditionalInformation() {
+ return additionalInformation;
+ }
+
+ @Override
+ public String getUsername() {
+ return this.username;
+ }
+
+ @Override
+ public void addAdditionalInformation(String key, Object value) {
+ if (additionalInformation == null) {
+ additionalInformation = new HashMap<>();
+ }
+ additionalInformation.put(key, value);
+ }
}
diff --git a/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/SessionTokenImpl.java b/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/SessionTokenImpl.java
deleted file mode 100644
index d409ee9..0000000
--- a/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/SessionTokenImpl.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.servicecomb.authentication.token;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-
-public class SessionTokenImpl implements SessionToken {
- private String value;
-
- private long issueAt;
-
- private String username;
-
- private TokenDynamicProperties config;
-
- private Map<String, Object> additionalInformation;
-
- public SessionTokenImpl(String username) {
- this.value = UUID.randomUUID().toString();
- this.issueAt = System.currentTimeMillis();
- this.username = username;
- this.config = TokenDynamicPropertiesManager.getTokenConfiguration(username);
- }
-
- @Override
- public long getIssueAt() {
- return this.issueAt;
- }
-
- @Override
- public long getExpiresIn() {
- return this.config.expiresIn;
- }
-
- @Override
- public long getNotBefore() {
- return this.config.notBefore;
- }
-
- @Override
- public String getValue() {
- return this.value;
- }
-
- @Override
- public Map<String, Object> getAdditionalInformation() {
- return additionalInformation;
- }
-
- @Override
- public String username() {
- return this.username;
- }
-
- @Override
- public void addAdditionalInformation(String key, Object value) {
- if (additionalInformation == null) {
- additionalInformation = new HashMap<>();
- }
- additionalInformation.put(key, value);
- }
-}
diff --git a/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/SessionTokenStore.java b/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/SessionTokenStore.java
index 59b23aa..631f3d7 100644
--- a/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/SessionTokenStore.java
+++ b/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/SessionTokenStore.java
@@ -23,7 +23,7 @@
@Override
public SessionToken createToken(UserDetails userDetails) {
- return new SessionTokenImpl(userDetails.getUsername());
+ return new SessionToken(userDetails.getUsername());
}
}
diff --git a/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/Token.java b/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/Token.java
index ca51f89..55b1423 100644
--- a/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/Token.java
+++ b/api/common/service/src/main/java/org/apache/servicecomb/authentication/token/Token.java
@@ -17,11 +17,15 @@
package org.apache.servicecomb.authentication.token;
+import java.io.Serializable;
import java.util.Map;
-public interface Token {
- String username();
+import com.fasterxml.jackson.annotation.JsonIgnore;
+public interface Token extends Serializable {
+ String getUsername();
+
+ @JsonIgnore
default boolean isExpired() {
return (System.currentTimeMillis() < getNotBefore()) ||
(System.currentTimeMillis() - getIssueAt() > getExpiresIn() * 1000);
@@ -36,6 +40,6 @@
String getValue();
Map<String, Object> getAdditionalInformation();
-
+
void addAdditionalInformation(String key, Object value);
}
diff --git a/api/edge-service/endpoint/src/main/java/org/apache/servicecomb/authentication/edge/AuthenticationServerTokenEndpoint.java b/api/edge-service/endpoint/src/main/java/org/apache/servicecomb/authentication/edge/AuthenticationServerTokenEndpoint.java
index 50c29d3..18ad3af 100644
--- a/api/edge-service/endpoint/src/main/java/org/apache/servicecomb/authentication/edge/AuthenticationServerTokenEndpoint.java
+++ b/api/edge-service/endpoint/src/main/java/org/apache/servicecomb/authentication/edge/AuthenticationServerTokenEndpoint.java
@@ -20,12 +20,12 @@
import java.util.Map;
import java.util.concurrent.CompletableFuture;
-import org.apache.servicecomb.authentication.server.TokenResponse;
+import org.apache.servicecomb.authentication.token.OpenIDToken;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
public interface AuthenticationServerTokenEndpoint {
@PostMapping(path = "/", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
- public CompletableFuture<TokenResponse> getToken(@RequestBody Map<String, String> parameters);
+ public CompletableFuture<OpenIDToken> getToken(@RequestBody Map<String, String> parameters);
}
diff --git a/api/edge-service/endpoint/src/main/java/org/apache/servicecomb/authentication/edge/DumyEdgeTokenResponseProcessor.java b/api/edge-service/endpoint/src/main/java/org/apache/servicecomb/authentication/edge/DumyEdgeTokenResponseProcessor.java
deleted file mode 100644
index 97dd3c4..0000000
--- a/api/edge-service/endpoint/src/main/java/org/apache/servicecomb/authentication/edge/DumyEdgeTokenResponseProcessor.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.servicecomb.authentication.edge;
-
-import org.apache.servicecomb.authentication.server.TokenResponse;
-
-public class DumyEdgeTokenResponseProcessor implements EdgeTokenResponseProcessor {
- public DumyEdgeTokenResponseProcessor() {
- }
-
- @Override
- public void process(TokenResponse tokenResponse) {
- }
-
-}
diff --git a/api/edge-service/endpoint/src/main/java/org/apache/servicecomb/authentication/edge/EdgeConfiguration.java b/api/edge-service/endpoint/src/main/java/org/apache/servicecomb/authentication/edge/EdgeConfiguration.java
index 4142c4f..bcb48a8 100644
--- a/api/edge-service/endpoint/src/main/java/org/apache/servicecomb/authentication/edge/EdgeConfiguration.java
+++ b/api/edge-service/endpoint/src/main/java/org/apache/servicecomb/authentication/edge/EdgeConfiguration.java
@@ -17,16 +17,9 @@
package org.apache.servicecomb.authentication.edge;
-import org.apache.servicecomb.authentication.util.CommonConstants;
-import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import org.springframework.core.annotation.Order;
@Configuration
public class EdgeConfiguration {
- @Bean(name = {CommonConstants.BEAN_AUTH_EDGE_TOKEN_RESPONSE_PROCESSOR})
- @Order(CommonConstants.BEAN_DEFAULT_ORDER)
- public EdgeTokenResponseProcessor edgeTokenResponseProcessor() {
- return new DumyEdgeTokenResponseProcessor();
- }
+
}
diff --git a/api/edge-service/endpoint/src/main/java/org/apache/servicecomb/authentication/edge/EdgeTokenResponseProcessor.java b/api/edge-service/endpoint/src/main/java/org/apache/servicecomb/authentication/edge/EdgeTokenResponseProcessor.java
deleted file mode 100644
index 09ea7b3..0000000
--- a/api/edge-service/endpoint/src/main/java/org/apache/servicecomb/authentication/edge/EdgeTokenResponseProcessor.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.servicecomb.authentication.edge;
-
-import org.apache.servicecomb.authentication.server.TokenResponse;
-
-public interface EdgeTokenResponseProcessor {
- void process(TokenResponse tokenResponse);
-}
diff --git a/api/edge-service/endpoint/src/main/java/org/apache/servicecomb/authentication/edge/TokenEndpoint.java b/api/edge-service/endpoint/src/main/java/org/apache/servicecomb/authentication/edge/TokenEndpoint.java
index 578f71a..ffafe1a 100644
--- a/api/edge-service/endpoint/src/main/java/org/apache/servicecomb/authentication/edge/TokenEndpoint.java
+++ b/api/edge-service/endpoint/src/main/java/org/apache/servicecomb/authentication/edge/TokenEndpoint.java
@@ -20,12 +20,9 @@
import java.util.Map;
import java.util.concurrent.CompletableFuture;
-import org.apache.servicecomb.authentication.server.TokenResponse;
-import org.apache.servicecomb.authentication.util.CommonConstants;
+import org.apache.servicecomb.authentication.token.OpenIDToken;
import org.apache.servicecomb.provider.pojo.RpcReference;
import org.apache.servicecomb.provider.rest.common.RestSchema;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -37,21 +34,16 @@
@RpcReference(microserviceName = "authentication-server", schemaId = "TokenEndpoint")
private AuthenticationServerTokenEndpoint authenticationSererTokenEndpoint;
- @Autowired
- @Qualifier(CommonConstants.BEAN_AUTH_EDGE_TOKEN_RESPONSE_PROCESSOR)
- private EdgeTokenResponseProcessor edgeTokenResponseProcessor;
-
@Override
@PostMapping(path = "/", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public CompletableFuture<TokenResponse> getToken(@RequestBody Map<String, String> parameters) {
CompletableFuture<TokenResponse> result = new CompletableFuture<>();
- CompletableFuture<TokenResponse> response =
+ CompletableFuture<OpenIDToken> response =
authenticationSererTokenEndpoint.getToken(parameters);
response.whenComplete((tokenResonse, ex) -> {
if (!response.isCompletedExceptionally()) {
- result.complete(tokenResonse);
- edgeTokenResponseProcessor.process(tokenResonse);
+ result.complete(TokenResponse.fromOpenIDToken(tokenResonse));
} else {
result.completeExceptionally(ex);
}
diff --git a/api/authentication-server/service/src/main/java/org/apache/servicecomb/authentication/server/TokenResponse.java b/api/edge-service/service/src/main/java/org/apache/servicecomb/authentication/edge/TokenResponse.java
similarity index 97%
rename from api/authentication-server/service/src/main/java/org/apache/servicecomb/authentication/server/TokenResponse.java
rename to api/edge-service/service/src/main/java/org/apache/servicecomb/authentication/edge/TokenResponse.java
index 32e7fb5..9fc7b67 100644
--- a/api/authentication-server/service/src/main/java/org/apache/servicecomb/authentication/server/TokenResponse.java
+++ b/api/edge-service/service/src/main/java/org/apache/servicecomb/authentication/edge/TokenResponse.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.authentication.server;
+package org.apache.servicecomb.authentication.edge;
import java.util.Map;
import java.util.Set;
diff --git a/api/edge-service/service/src/main/java/org/apache/servicecomb/authentication/edge/TokenService.java b/api/edge-service/service/src/main/java/org/apache/servicecomb/authentication/edge/TokenService.java
index 5e12a45..e279986 100644
--- a/api/edge-service/service/src/main/java/org/apache/servicecomb/authentication/edge/TokenService.java
+++ b/api/edge-service/service/src/main/java/org/apache/servicecomb/authentication/edge/TokenService.java
@@ -20,8 +20,6 @@
import java.util.Map;
import java.util.concurrent.CompletableFuture;
-import org.apache.servicecomb.authentication.server.TokenResponse;
-
public interface TokenService {
CompletableFuture<TokenResponse> getToken(Map<String, String> parameters);
diff --git a/samples/AuthenticationServer/src/main/java/org/apache/servicecomb/authentication/AuthenticationConfiguration.java b/samples/AuthenticationServer/src/main/java/org/apache/servicecomb/authentication/AuthenticationConfiguration.java
index 0e4b462..854c940 100644
--- a/samples/AuthenticationServer/src/main/java/org/apache/servicecomb/authentication/AuthenticationConfiguration.java
+++ b/samples/AuthenticationServer/src/main/java/org/apache/servicecomb/authentication/AuthenticationConfiguration.java
@@ -17,8 +17,6 @@
package org.apache.servicecomb.authentication;
-import org.apache.servicecomb.authentication.token.AbstractOpenIDTokenStore;
-import org.apache.servicecomb.authentication.token.InMemoryOpenIDTokenStore;
import org.apache.servicecomb.authentication.util.CommonConstants;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -40,10 +38,4 @@
// If using MacSigner, need to protect the shared key by properly encryption.
return new MacSigner("Please change this key.");
}
-
- @Bean(name = CommonConstants.BEAN_AUTH_OPEN_ID_TOKEN_STORE)
- public AbstractOpenIDTokenStore openIDTokenStore() {
- // NOTICE: Use in memory store for testing. Need to implement JDBC or Redis SessionIDTokenStore in product.
- return new InMemoryOpenIDTokenStore();
- }
}
diff --git a/samples/AuthenticationServer/src/main/java/org/apache/servicecomb/authentication/JDBCOpenIDTokenStore.java b/samples/AuthenticationServer/src/main/java/org/apache/servicecomb/authentication/JDBCOpenIDTokenStore.java
new file mode 100644
index 0000000..0163612
--- /dev/null
+++ b/samples/AuthenticationServer/src/main/java/org/apache/servicecomb/authentication/JDBCOpenIDTokenStore.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.servicecomb.authentication;
+
+import org.apache.servicecomb.authentication.jwt.JsonParser;
+import org.apache.servicecomb.authentication.token.AbstractOpenIDTokenStore;
+import org.apache.servicecomb.authentication.token.OpenIDToken;
+import org.apache.servicecomb.authentication.user.TokenMapper;
+import org.apache.servicecomb.authentication.util.CommonConstants;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component(CommonConstants.BEAN_AUTH_OPEN_ID_TOKEN_STORE)
+public class JDBCOpenIDTokenStore extends AbstractOpenIDTokenStore {
+ @Autowired
+ private TokenMapper tokenMapper;
+
+ @Override
+ public OpenIDToken readTokenByValue(String value) {
+ String tokenInfo = tokenMapper.getTokenInfoByAccessTokenId(value);
+ if (tokenInfo != null) {
+ return JsonParser.parse(tokenInfo, OpenIDToken.class);
+ }
+ return null;
+ }
+
+ @Override
+ public OpenIDToken readTokenByRefreshTokenValue(String refreshTokenValue) {
+ String tokenInfo = tokenMapper.getTokenInfoByRefreshTokenId(refreshTokenValue);
+ if (tokenInfo != null) {
+ return JsonParser.parse(tokenInfo, OpenIDToken.class);
+ }
+ return null;
+ }
+
+ @Override
+ public void saveToken(OpenIDToken token) {
+ tokenMapper.insertNewToken(token.getValue(),
+ token.getRefreshToken().getValue(),
+ JsonParser.unparse(token));
+ }
+
+}
diff --git a/samples/AuthenticationServer/src/main/java/org/apache/servicecomb/authentication/user/TokenMapper.java b/samples/AuthenticationServer/src/main/java/org/apache/servicecomb/authentication/user/TokenMapper.java
new file mode 100644
index 0000000..7ef3f22
--- /dev/null
+++ b/samples/AuthenticationServer/src/main/java/org/apache/servicecomb/authentication/user/TokenMapper.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.servicecomb.authentication.user;
+
+import org.apache.ibatis.annotations.Param;
+
+public interface TokenMapper {
+ public void insertNewToken(@Param("accessTokenId") String accessTokenId,
+ @Param("refreshTokenId") String refreshTokenId,
+ @Param("tokenInfo") String tokenInfo);
+
+ public String getTokenInfoByAccessTokenId(@Param("accessTokenId") String accessTokenId);
+
+ public String getTokenInfoByRefreshTokenId(@Param("refreshTokenId") String refreshTokenId);
+
+ public String getTokenInfoByIdTokenId(@Param("idTokenId") String idTokenId);
+}
diff --git a/samples/AuthenticationServer/src/main/resources/META-INF/spring/authentication.server.bean.xml b/samples/AuthenticationServer/src/main/resources/META-INF/spring/authentication.server.bean.xml
index dac1cdf..08ebeb0 100644
--- a/samples/AuthenticationServer/src/main/resources/META-INF/spring/authentication.server.bean.xml
+++ b/samples/AuthenticationServer/src/main/resources/META-INF/spring/authentication.server.bean.xml
@@ -38,5 +38,9 @@
value="org.apache.servicecomb.authentication.user.UserMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
-
+ <bean id="tokenMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
+ <property name="mapperInterface"
+ value="org.apache.servicecomb.authentication.user.TokenMapper" />
+ <property name="sqlSessionFactory" ref="sqlSessionFactory" />
+ </bean>
</beans>
\ No newline at end of file
diff --git a/samples/AuthenticationServer/src/main/resources/config/TokenMapper.xml b/samples/AuthenticationServer/src/main/resources/config/TokenMapper.xml
new file mode 100644
index 0000000..8d702f9
--- /dev/null
+++ b/samples/AuthenticationServer/src/main/resources/config/TokenMapper.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with ~
+ this work for additional information regarding copyright ownership. ~ The
+ ASF licenses this file to You under the Apache License, Version 2.0 ~ (the
+ "License"); you may not use this file except in compliance with ~ the License.
+ You may obtain a copy of the License at ~ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~ ~ Unless required by applicable law or agreed to in writing, software ~
+ distributed under the License is distributed on an "AS IS" BASIS, ~ WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the
+ License for the specific language governing permissions and ~ limitations
+ under the License. -->
+
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.apache.servicecomb.authentication.user.TokenMapper">
+ <insert id="insertNewToken">
+ insert into
+ T_TOKENS(ACCESS_TOKEN_VALUE,REFRESH_TOKEN_VALUE,TOKEN)
+ values(#{accessTokenId},#{refreshTokenId},#{tokenInfo})
+ </insert>
+
+ <select id="getTokenInfoByAccessTokenId" parameterType="java.lang.String"
+ resultType="java.lang.String">
+ select TOKEN
+ from T_TOKENS where ACCESS_TOKEN_VALUE =
+ #{accessTokenId}
+ </select>
+
+ <select id="getTokenInfoByRefreshTokenId" parameterType="java.lang.String"
+ resultType="java.lang.String">
+ select TOKEN
+ from T_TOKENS where REFRESH_TOKEN_VALUE =
+ #{refreshTokenId}
+ </select>
+</mapper>
\ No newline at end of file
diff --git a/samples/AuthenticationServer/src/main/resources/config/mybatis-config.xml b/samples/AuthenticationServer/src/main/resources/config/mybatis-config.xml
index 2bd7b68..9290b3f 100644
--- a/samples/AuthenticationServer/src/main/resources/config/mybatis-config.xml
+++ b/samples/AuthenticationServer/src/main/resources/config/mybatis-config.xml
@@ -15,7 +15,8 @@
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
- <mappers>
- <mapper resource="config/UserMapper.xml"/>
- </mappers>
+ <mappers>
+ <mapper resource="config/UserMapper.xml" />
+ <mapper resource="config/TokenMapper.xml" />
+ </mappers>
</configuration>
\ No newline at end of file
diff --git a/samples/AuthenticationServer/src/main/resources/sql/user.sql b/samples/AuthenticationServer/src/main/resources/sql/user.sql
index 223826d..b5dbfc7 100644
--- a/samples/AuthenticationServer/src/main/resources/sql/user.sql
+++ b/samples/AuthenticationServer/src/main/resources/sql/user.sql
@@ -73,7 +73,6 @@
`ID` INTEGER(8) NOT NULL AUTO_INCREMENT,
`ACCESS_TOKEN_VALUE` VARCHAR(256) NOT NULL,
`REFRESH_TOKEN_VALUE` VARCHAR(256) NOT NULL,
- `ID_TOKEN_VALUE` VARCHAR(256) NOT NULL,
`TOKEN` TEXT NOT NULL,
PRIMARY KEY (`ID`)
);
diff --git a/samples/Client/pom.xml b/samples/Client/pom.xml
index 5bbe9d8..b6b3220 100644
--- a/samples/Client/pom.xml
+++ b/samples/Client/pom.xml
@@ -33,7 +33,7 @@
<dependencies>
<dependency>
<groupId>org.apache.servicecomb.authentication</groupId>
- <artifactId>authentication-server-api-service</artifactId>
+ <artifactId>authentication-edge-api-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
@@ -64,7 +64,7 @@
<dependencies>
<dependency>
<groupId>org.apache.servicecomb.authentication</groupId>
- <artifactId>authentication-server-api-service</artifactId>
+ <artifactId>authentication-edge-api-service</artifactId>
</dependency>
<dependency>
<groupId>org.apache.servicecomb</groupId>
diff --git a/samples/Client/src/main/java/org/apache/servicecomb/authentication/AuthenticationTestCase.java b/samples/Client/src/main/java/org/apache/servicecomb/authentication/AuthenticationTestCase.java
index 2b8fd5a..7acb34d 100644
--- a/samples/Client/src/main/java/org/apache/servicecomb/authentication/AuthenticationTestCase.java
+++ b/samples/Client/src/main/java/org/apache/servicecomb/authentication/AuthenticationTestCase.java
@@ -17,7 +17,7 @@
package org.apache.servicecomb.authentication;
-import org.apache.servicecomb.authentication.server.TokenResponse;
+import org.apache.servicecomb.authentication.edge.TokenResponse;
import org.apache.servicecomb.authentication.util.CommonConstants;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
diff --git a/samples/Client/src/main/java/org/apache/servicecomb/authentication/TokenExpireTestCase.java b/samples/Client/src/main/java/org/apache/servicecomb/authentication/TokenExpireTestCase.java
index 00a557e..766aba0 100644
--- a/samples/Client/src/main/java/org/apache/servicecomb/authentication/TokenExpireTestCase.java
+++ b/samples/Client/src/main/java/org/apache/servicecomb/authentication/TokenExpireTestCase.java
@@ -17,7 +17,7 @@
package org.apache.servicecomb.authentication;
-import org.apache.servicecomb.authentication.server.TokenResponse;
+import org.apache.servicecomb.authentication.edge.TokenResponse;
import org.apache.servicecomb.authentication.util.CommonConstants;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;