Токен доступа WSO2IS JWT

Я пытаюсь получить токен доступа JWT от WSO2 IS. Я следовал инструкциям из примеру безопасности msf4j Oauth2, и мне удалось получить токен доступа JWT, предоставив пароль владельца ресурса тип. но у меня проблема с внешней аутентификацией токена.

похоже, что токен не был подписан по умолчанию «wso2carbon.jks».

Кроме того, мои настройки претензий в «поставщиках услуг» не отражались в содержимом jwt.

поэтому мои вопросы: как настроить сертификат подписи JWT в WSO2IS?

а также: Как манипулировать претензиями в JWT?

Я не хочу обращаться к конечной точке «самоанализа» из соображений производительности, и моя стратегия состоит в том, чтобы просто доверять IS, только чтобы убедиться (локально) в подлинности токена JWT.

пожалуйста, порекомендуйте

спасибо


person George Wang    schedule 08.03.2017    source источник
comment
Я думаю, вы можете взглянуть на этот поток: profil" title="обязательные утверждения поставщика услуг всегда запрашиваются и не возвращаются в профиле openid"> stackoverflow.com/questions/42626010/   -  person Giovanni    schedule 08.03.2017


Ответы (2)


Вы можете следовать [1], чтобы получить токены доступа JWT (автономные токены доступа) с помощью WSO2 Identity Server.

[1] https://medium.com/@hasinthaindrajee/self-contained-access-tokens-with-wso2-identity-server-82111631d5b6

person farasath    schedule 08.03.2017

ну, кажется, я сам виноват.

Я использовал пакет JWT jose4j и продолжал получать сообщение об ошибке проверки.

после дальнейшей проверки в msf4j, я переключился на nimbus-jose-jwt JWT и сделал это,

ниже моя реализация.

import com.nimbusds.jose.JWSVerifier;
import com.nimbusds.jose.crypto.RSASSAVerifier;
import com.nimbusds.jwt.JWTClaimsSet;
import com.nimbusds.jwt.SignedJWT;
public class JwtParser {

     private static final String KEYSTORE = System.getProperty("javax.net.ssl.trustStore");
     private static final String KEYSTORE_PASSWORD = System.getProperty("javax.net.ssl.trustStorePassword");

     private static Map<String, JWSVerifier> verifiers = getVerifiers();

     public static JWTClaimsSet verify(String jwt) throws Exception {

                SignedJWT signedJWT = SignedJWT.parse(jwt);
                if (!new Date().before(signedJWT.getJWTClaimsSet().getExpirationTime())) {
                    new Exception("token has expired");
                }

                boolean notYet = true;
                for(Iterator<JWSVerifier> it = verifiers.values().iterator(); notYet && it.hasNext();){
                    JWSVerifier verifier = it.next();
                    notYet =  !signedJWT.verify(verifier);
                }

                if(notYet){
                    throw new Exception("token verification failed");
                }
                JWTClaimsSet claims = signedJWT.getJWTClaimsSet();
                if (claims == null) {
                    // Do something with claims
                    throw new Exception("non valid payload in token, failed");
                }

                return claims;
     }

     private static Map<String, JWSVerifier> getVerifiers(){

         Map<String, JWSVerifier> verifiers = new HashMap<>();

        try (InputStream inputStream = new FileInputStream(KEYSTORE)) {
            KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
            keystore.load(inputStream, KEYSTORE_PASSWORD.toCharArray());
            Enumeration<String> aliases = keystore.aliases();

            while(aliases.hasMoreElements()){
                String alias = aliases.nextElement();

                if(!keystore.isCertificateEntry(alias)){
                    continue;   
                }
                Certificate cert = keystore.getCertificate(alias);
                if(cert == null){
                    continue;
                }
                PublicKey key = cert.getPublicKey(); 
                verifiers.put(alias, new RSASSAVerifier((RSAPublicKey)key));        
            }


        }catch(KeyStoreException | CertificateException | NoSuchAlgorithmException | IOException e){
            //TODO: report the exception
        }
        return verifiers;
     }

}
person George Wang    schedule 08.03.2017