assertion token granter moved to nimbus-jose
parent
10ab55a7e2
commit
0f99e0e06d
|
@ -4,28 +4,28 @@
|
||||||
package org.mitre.oauth2.token;
|
package org.mitre.oauth2.token;
|
||||||
|
|
||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.text.ParseException;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import org.mitre.jwt.model.Jwt;
|
|
||||||
import org.mitre.jwt.model.JwtClaims;
|
|
||||||
import org.mitre.jwt.signer.service.JwtSigningAndValidationService;
|
import org.mitre.jwt.signer.service.JwtSigningAndValidationService;
|
||||||
import org.mitre.oauth2.model.ClientDetailsEntity;
|
import org.mitre.oauth2.model.ClientDetailsEntity;
|
||||||
import org.mitre.oauth2.model.OAuth2AccessTokenEntity;
|
import org.mitre.oauth2.model.OAuth2AccessTokenEntity;
|
||||||
import org.mitre.oauth2.service.ClientDetailsEntityService;
|
import org.mitre.oauth2.service.ClientDetailsEntityService;
|
||||||
import org.mitre.oauth2.service.OAuth2TokenEntityService;
|
import org.mitre.oauth2.service.OAuth2TokenEntityService;
|
||||||
import org.mitre.openid.connect.config.ConfigurationPropertiesBean;
|
import org.mitre.openid.connect.config.ConfigurationPropertiesBean;
|
||||||
import org.mitre.openid.connect.model.IdToken;
|
|
||||||
import org.mitre.openid.connect.model.IdTokenClaims;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.security.oauth2.common.OAuth2AccessToken;
|
import org.springframework.security.oauth2.common.OAuth2AccessToken;
|
||||||
import org.springframework.security.oauth2.common.exceptions.InvalidClientException;
|
import org.springframework.security.oauth2.common.exceptions.InvalidClientException;
|
||||||
import org.springframework.security.oauth2.provider.AuthorizationRequest;
|
import org.springframework.security.oauth2.provider.AuthorizationRequest;
|
||||||
import org.springframework.security.oauth2.provider.ClientDetailsService;
|
|
||||||
import org.springframework.security.oauth2.provider.OAuth2Authentication;
|
|
||||||
import org.springframework.security.oauth2.provider.token.AbstractTokenGranter;
|
import org.springframework.security.oauth2.provider.token.AbstractTokenGranter;
|
||||||
import org.springframework.security.oauth2.provider.token.AuthorizationServerTokenServices;
|
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import com.nimbusds.jose.JWSHeader;
|
||||||
|
import com.nimbusds.jwt.JWT;
|
||||||
|
import com.nimbusds.jwt.JWTClaimsSet;
|
||||||
|
import com.nimbusds.jwt.JWTParser;
|
||||||
|
import com.nimbusds.jwt.SignedJWT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author jricher
|
* @author jricher
|
||||||
*
|
*
|
||||||
|
@ -72,27 +72,46 @@ public class JwtAssertionTokenGranter extends AbstractTokenGranter {
|
||||||
|
|
||||||
// it's an ID token, process it accordingly
|
// it's an ID token, process it accordingly
|
||||||
|
|
||||||
IdToken idToken = IdToken.parse(incomingTokenValue);
|
// TODO: make this use the idtoken class
|
||||||
|
JWT idToken;
|
||||||
|
try {
|
||||||
|
idToken = JWTParser.parse(incomingTokenValue);
|
||||||
|
} catch (ParseException e1) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e1.printStackTrace();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
OAuth2AccessTokenEntity accessToken = tokenServices.getAccessTokenForIdToken(incomingToken);
|
OAuth2AccessTokenEntity accessToken = tokenServices.getAccessTokenForIdToken(incomingToken);
|
||||||
|
|
||||||
if (accessToken != null) {
|
if (accessToken != null) {
|
||||||
|
|
||||||
//OAuth2AccessTokenEntity newIdToken = tokenServices.get
|
//OAuth2AccessTokenEntity newIdToken = tokenServices.get
|
||||||
IdToken newIdToken = new IdToken();
|
|
||||||
OAuth2AccessTokenEntity newIdTokenEntity = new OAuth2AccessTokenEntity();
|
OAuth2AccessTokenEntity newIdTokenEntity = new OAuth2AccessTokenEntity();
|
||||||
|
|
||||||
IdTokenClaims claims = newIdToken.getClaims();
|
// FIXME: we shouldn't have to roundtrip this through JSON to get it to copy all existing claims
|
||||||
claims.loadFromClaimSet(idToken.getClaims()); // copy over all existing claims
|
JWTClaimsSet claims;
|
||||||
|
try {
|
||||||
|
claims = JWTClaimsSet.parse(idToken.getJWTClaimsSet().toJSONObject());
|
||||||
|
} catch (ParseException e1) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e1.printStackTrace();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
// update expiration and issued-at claims
|
// update expiration and issued-at claims
|
||||||
if (client.getIdTokenValiditySeconds() != null) {
|
if (client.getIdTokenValiditySeconds() != null) {
|
||||||
Date expiration = new Date(System.currentTimeMillis() + (client.getIdTokenValiditySeconds() * 1000L));
|
Date expiration = new Date(System.currentTimeMillis() + (client.getIdTokenValiditySeconds() * 1000L));
|
||||||
claims.setExpiration(expiration);
|
// FIXME: Nimbus-JOSE Date fields
|
||||||
|
claims.setExpirationTimeClaim(expiration.getTime());
|
||||||
newIdTokenEntity.setExpiration(expiration);
|
newIdTokenEntity.setExpiration(expiration);
|
||||||
}
|
}
|
||||||
claims.setIssuedAt(new Date());
|
// FIXME: Nimbus-JOSE Date fields
|
||||||
|
claims.setIssuedAtClaim(new Date().getTime());
|
||||||
|
|
||||||
|
|
||||||
|
SignedJWT newIdToken = new SignedJWT((JWSHeader) idToken.getHeader(), claims);
|
||||||
try {
|
try {
|
||||||
jwtService.signJwt(newIdToken);
|
jwtService.signJwt(newIdToken);
|
||||||
} catch (NoSuchAlgorithmException e) {
|
} catch (NoSuchAlgorithmException e) {
|
||||||
|
|
Loading…
Reference in New Issue