2015-08-26 15 views
10

kullanarak. OpenID ile durum az ya da çok açık - JWKs Endpoint: https://smth.com/JWKS kullanarak bunu doğrulayabilirim. Örneğin (https://bitbucket.org/b_c/jose4j/wiki/JWT%20Examples) olduğu gibiSüreç JWT belirteç İki JWTS almak JWKs Endpoint

:

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

soru Erişim Token ile devam etmek nasıl. Ben ondan userId ve userDetails ayıklamak olabilir, ama ben de bunu doğrulamak gerekiyor?

ben hata alıyorum simgesi için aynıdır denerseniz: UnresolvableKeyException: Unable to find a suitable verification key for JWS w/ header {"alg" : "RS256", "kid":"1"}. Ve gerçekten de "çocuk" için bir anahtar yoktur: "1", Aynı zamanda "1" bu değer biraz garip görünüyor?

Tamamen yanlış bir şey yapıyorum? Açık Kimlik Bağlan istemci rolünü uygulayan veya Partiyi güvenerek gibi

+0

https://smth.com/JWKS içeriği nedir? smth.com benim için çözülmez. –

+0

Tüm istisna mesajı, içeriği JWKS bitiş noktasından da göstermelidir. JWKS'yi görmeden tam olarak ne olduğunu söyleyemem ama temel olarak ne olduğunu, JWT'nin RSA ile imzalandığını ve “1” değerine sahip bir anahtar kimlik başlığının dahil edildiğini ve bunun da JWKS'de uygun doğrulama anahtarını göstermesi gerektiğini (görsel örnek http://www.slideshare.net/briandavidcampbell/i-left-my-jwt-in-san-jose/30). Bu, JWKS son noktasında çocuk = 1 olan RSA anahtarı olmadı. –

+0

Yanıt için teşekkürler, soru değiştirdim. Evet, çocuk = 1 için bir anahtar yoktur, '1' değeri de 'dp1kr' gibi gerçek bir çocuk sahibi olduğum OpenID ile karşılaştırıldığında garip görünüyor ve zamanla değişiyor. Bu tür bir kimlik doğrulamasıyla karşılaşırsanız ve bana bir ipucu verebilirseniz - her iki belirteç de aynı şekilde ilerlenmeli mi yoksa yapılmamalı mı? –

cevap

5

geliyor. İki simge, kimlik belirteci ve erişim belirteci farklı amaçlara hizmet eder ve istemci tarafından farklı şekilde ele alınmalıdır. Kimlik jetonu istemciye yöneliktir ve son kullanıcının istemcide kimlik doğrulamasını sağlar. İstemci, son kullanıcının kullanımına izin vermeden önce kimlik jetonunu doğrulamalıdır (imzayı doğrular ve exp ve aud, vb. Gibi iddiaları doğrular). Ancak erişim belirteci, istemcinin kaynaklara veya API'lere erişmek için kullanması içindir, ancak doğrudan tüketmek veya doğrulamak için müşteri için amaçlanmıştır. Erişim belirteci, müşteriye opak değildir ve müşteri, ayrıntılarını umursamamalı veya bilmemelidir. Aslında, erişim simgeleri her zaman JWT değildir. OpenID Bağlantısında, erişim belirteci son kullanıcı hakkında daha fazla iddia/bilgi almak için kullanıcı bilgisi uç noktasını (HTTP üstbilgisi, Authorization: Bearer [access token] ile) çağırmak için kullanılır.

çocuk için "1" değeri tamamen yasaldır ama AS/OP ve kullanıcı bilgisi uç nokta nasılsa hakkında bildiğim bir anahtara bahsediyor. OpenID Connect JWKS uç noktasında bir anahtar değildir. "1", müşterinin bilmesi gereken bir anahtar değildir, çünkü müşterinin erişim belirtecini doğrudan doğrulaması gerekmez.

+0

Bazı onaylar görmek istiyorum (bazı güzel dokümanlar için bağlantı). Bu kesin kimlik doğrulaması hakkında hiçbir şey bulamıyorum - JWT belirteçleri ile demek istiyorum: OpenId ve AccessToken. –

+0

http://openid.net/specs/openid-connect-basic-1_0.html (http://openid.net/specs/openid dosyasının basitleştirilmiş bir profili olan 2.2, 2.3 vb. Bölümlerine bakınız) -connect-core-1_0.html ancak fikri iletmelidir). –

+0

Evet, bunu az çok okudum. Ama yine de AccessToken'i xxx.yyy.zzz olarak aldığımı ve zzz'yi hiç kullanmadığımı hatırlatıyorum. Neden o zaman orada? –