2015-08-26 23 views
10

Ricevo due JWT: un token OpenID Connect (id_token) e un token di accesso (access_token). La situazione con OpenID è più o meno chiara: posso convalidarla utilizzando l'endpoint JWK: https://smth.com/JWKS.Token processo JWT utilizzando l'endpoint JWK

come nell'esempio (https://bitbucket.org/b_c/jose4j/wiki/JWT%20Examples):

HttpsJwks httpsJkws = new HttpsJwks("https://smth.com/JWKS"); 
HttpsJwksVerificationKeyResolver httpsJwksKeyResolver = new HttpsJwksVerificationKeyResolver(httpsJkws); 
jwtConsumer = new JwtConsumerBuilder() 
    .setVerificationKeyResolver(httpsJwksKeyResolver) 
    .setExpectedAudience(...) 
    .setExpectedIssuer(...) 
    .build(); 

La domanda è: come procedere con il token di accesso. Posso estrarre da esso userId e userDetails, ma suppongo di aver bisogno anche di convalidarlo?

Se provo come nel token, sto ricevendo un errore: UnresolvableKeyException: Unable to find a suitable verification key for JWS w/ header {"alg" : "RS256", "kid":"1"}. E in effetti non esiste una chiave per "kid": "1", anche questo valore "1" sembra abbastanza strano?

Sto facendo qualcosa di totalmente sbagliato?

+0

Qual è il contenuto di https://smth.com/JWKS? smth.com non risolve per me. –

+0

Anche il messaggio di eccezione completo dovrebbe mostrare il contenuto da quell'endpoint JWKS. Senza vedere il JWKS non posso dire esattamente cosa sta succedendo, ma in pratica quello che sta succedendo è che il JWT è stato firmato con RSA e un'intestazione id chiave con valore "1" è stata inclusa, che dovrebbe puntare alla chiave di verifica appropriata nel JWKS (esempio visivo http://www.slideshare.net/briandavidcampbell/i-left-my-jwt-in-san-jose/30). Sembrerebbe che non ci sia una chiave RSA con kid = 1 in quel punto finale JWKS. –

+0

Grazie per la risposta, ho cambiato domanda. Sì, non esiste una chiave per kid = 1, anche il valore '1' sembra strano rispetto a OpenID, dove ottengo qualche bambino vero, come 'dp1kr' e cambia nel tempo. Se hai affrontato questo tipo di autenticazione e puoi darmi un suggerimento - se entrambi i token dovrebbero essere gestiti nello stesso modo o no? –

risposta

5

Sembra che si stia implementando il ruolo del client OpenID Connect o di Relying Party. I due token, token ID e token di accesso, hanno scopi diversi e devono essere gestiti in modo diverso dal cliente. Il token ID è destinato al client e consente l'autenticazione dell'utente finale sul client. Il client deve convalidare il token ID (verificare la firma e convalidare le attestazioni come exp e aud, ecc.) Prima di consentire all'utente finale. Il token di accesso, tuttavia, è per il client da utilizzare per accedere alle risorse o alle API ma non lo è direttamente destinato al cliente a consumare o convalidare. Il token di accesso è opaco per il cliente e il cliente non dovrebbe preoccuparsi o conoscere i suoi dettagli. Infatti, i token di accesso non sono sempre JWT. In OpenID Connect, il token di accesso viene utilizzato per chiamare l'endpoint di informazioni utente (con l'intestazione HTTP, Authorization: Bearer [access token]) per ottenere più attestazioni/informazioni sull'utente finale.

Il valore di "1" per il bambino è completamente legale ma si riferisce a una chiave che l'AS/OP e l'endpoint di informazioni dell'utente conoscono in qualche modo. Non è una chiave nell'endpoint OpenID Connect JWKS. "1" non è una chiave di cui il cliente ha bisogno di essere a conoscenza perché il client non dovrebbe verificare direttamente il token di accesso.

+0

Mi piacerebbe vedere qualche conferma (alcuni link a bei documenti, ad esempio). Non riesco a trovare nulla su questa autenticazione esatta - voglio dire con troppo token JWT: OpenId e AccessToken. –

+0

Dai un'occhiata alla sezione 2.2, 2.3, ecc. In http://openid.net/specs/openid-connect-basic-1_0.html (che è un profilo semplificato di http://openid.net/specs/openid -connect-core-1_0.html ma dovrebbe trasmettere l'idea). –

+0

Sì, ho letto questo più o meno. Ma sono ancora confuso di ricevere AccessToken come xxx.yyy.zzz e di non usare affatto zzz. Perché allora è lì? –

Problemi correlati