13

Yetkilendirme sunucumuzdan erişim belirteci almak için kullanıcı adı-parola hibe kullanıyoruz. Erişim belirtecini, kullanıcı tarafından oturum açana veya istemci uygulamasını kapatıncaya kadar sağlanan yenileme belirtecini kullanarak süresi dolmadan yenilemek istiyoruz. Sadece bu yenileme jetonu isteği nasıl herhangi örneklerini bulamıyorum Ancak Spring Security'de kullanıcı adı-parola hibe yenileme belirteci kullanarak yeni erişim belirteci isteğinde bulunun OAuth2

..

biz böyle bir şey diyoruz belirteci elde etmek için:

curl -v --data "grant_type=password&username=user&password=pass&client_id=my_client" http://localhost:8080/oauth/token 

Yani çağrıyı beklediğiniz yenilemek için Bu gibi görünmeye:

curl -v --data "grant_type=refresh_token&access_token=THE_ACCESS_TOKEN&refresh_token=THE_REFRESH_TOKEN" http://localhost:8080/oauth/token 

ya da belki

curl -v -H "Authorization: Bearer THE_ACCESS_TOKEN" --data "grant_type=refresh_token&refresh_token=THE_REFRESH_TOKEN" http://localhost:8080/oauth/token 

Ancak, bana bir 401 vereceğim ..

Evet, belki clientId eklemeliyim? İstemci sırrını kullanamıyorum çünkü hiçbiri yoktur (belirteci almak için yukarıdaki talebe bakın). Kimlik doğrulama, kullanıcı adından ve şifrenizden sonra ..

Bence sunucu yapılandırması hakkımız var, bu yüzden buraya göndermeyeceğim. Örnek isteklerimden birinin çalışması gerekiyorsa ve bunları ekleyeceğim önemli yapılandırma bölümlerini görmeniz gerekiyor.

Teşekkürler!

cevap

24

dediğim gibi biz takılmak o olamaz çünkü biz, bir istemci sır kullanmayın Javascript istemci uygulamasında. Ve kullanıcı adı-şifre hibe kullanırken, yine de gerekli değildir. (Erişim belirtecini istediğimiz yolu görün). Nitekim ben çözüme yakın oldu ve sonunda anladım:

curl -v --data "grant_type=refresh_token&client_id=THE_CLIENT_ID&refresh_token=THE_REFRESH_TOKEN" http://localhost:8080/oauth/token 

böylece erişim belirteci veya istemci sırrı gerek.

Her şeyden önce yeterince güvenli hissediyor.

  • İstemci uygulaması tarafında herhangi bir gizli saklamayız.
  • Kullanıcıların her zaman giriş yapmaları için bir parola gerekir ve yalnızca kaynaklarını görebilirler.
  • Yenileme jetonunun geçerliliğini iş günü veya benzeri bir şey gibi gerçekçi bir zamanla sınırlıyoruz, böylece bir saldırganın penceresi sınırlı olsa bile kullanıcının uzun bir süre boyunca kaynak sunucuya bağlı kalmasına izin veriyor. oturum, toplantı, celse.
+0

Niçin burada hiçbir şekilde yenileme jetonuna ihtiyacınız var. Sınırlı geçerliliğe sahip erişim belirteci, daha basit bir iş akışıyla tam olarak aynı davranacaktır. Bir şey mi eksik? – long

+0

@renk erişim kodunuzun süresi dolduysa ve kullanıcınız yine de oturum açtıysa. Bu durumda yeni bir erişim belirteci almanız gerekir ve bunun için yenileme jetonu kullanırız –

6

grant_type parolası için, bir clientId ve clientSecret gereklidir. Üçüncü denemenizle yakındınız, ancak Yetkilendirme başlığında Erişim Simgesi yerine Base64 kodlu clientId ve clientSecret komutunu geçersiniz. Bu doğru yenileme jetonu istek: İyi bir referans için

curl -H "Authorization: Bearer [base64encode(clientId:clientSecret)]" "https://yourdomain.com/oauth/token?grant_type=refresh_token&refresh_token=[yourRefreshToken]" 

, bu check out: Yani http://techblog.hybris.com/2012/06/11/oauth2-resource-owner-password-flow/

+0

Merhaba @Kubgfuters, yapılandırmamla ilgili küçük bir sorunum var. Öncelikle isteği belirtmek için isteği gönderdiğimde yanıt, belirteçle başarılı bir şekilde üretilir.Ancak, kaynağa erişmeye çalıştığımda, belirteç yerine 64 kodlu kullanıcı adı/parola gönderirseniz, kaynak, tokmak yerine başarılı bir şekilde erişir. Bu benim confuiguration URL'mdir https://github.com/harmeetsingh0013/dummy_project/blob/master/dummy-project-configuration/src/main/java/com/harmeetsingh13/config/Oauth2SpringSecurityConfig.java –

+0

Sanırım Genel olarak OAuth2 değil, Spring güvenlik sınırlaması hakkında konuşuyor. Her neyse, açıklık için OAuth2 için gerekli değildir: https://tools.ietf.org/html/rfc6749#section-4.3.2 –

İlgili konular