2016-03-25 14 views
0

Bir tüketici uygulaması kurdum ve oauth iş akışının çoğu doğru görünüyor, ancak geri arama url'si sağlayıcı tarafından çağrıldıktan sonra, bir erişim elde etmeye çalışır. jetonu TWICE. İlk kezOauth 1.0a Tüketici kodu iki kez erişim belirtecini eşitliyor

http://localhost:8080/app/ws/oauth/token [OAuth oauth_consumer_key = "itd79n64zlwv5hhv", oauth_nonce = "cac26978-c36c-4a8b-8f3e-3e779ff927ab", oauth_signature = "5c8BM9qQoijXC2f5IXpQGtSQsys% 3D", oauth_signature_method = "HMAC-SHA1", oauth_timestamp = işleri "1458938403", oauth_token = "5451cf20-7eed-4797-819c-ee2316981654", oauth_verifier = "c56de555-79df-455e-ab87-f5f11b953fef", oauth_version = "1.0"]

yanıt 200, yük oauth_token içerir = a95d6305-4261-4c1d-a9b0-43411a0c2f2c & oauth_token_secret = 573702d2-70ca-412c-84e5-868e9ee07169

ama sonra, bu URL'yi tekrar çağırır.

http://localhost:8080/app/ws/oauth/token [OAuth oauth_consumer_key = "itd79n64zlwv5hhv", oauth_nonce = "6c013ef9-2f3c-49dd-84fb-97db73b5fb39", oauth_signature = "5RTQE5XtcqUwEFVvYQjExhH1eio% 3D", oauth_signature_method = "HMAC-SHA1", oauth_timestamp = "1458938403", oauth_token = "5451cf20-7eed-4797-819c-ee2316981654", oauth_verifier = "c56de555-79df-455e-ab87-f5f11b953fef", oauth_version = "1.0" istek belirteci olmuştur çünkü sunucudaki bir duruma neden olur

kaldırıldı ve erişim belirteci zaten yayınlandı.

Kodu geçerken, OAuthConsumerContextFilter öğesinin ilk aramadan sonra erişim kodunu depoladığını görebiliyorum.

Bir şekilde filtre zinciri sona erdiğinde, RequestOken ile CoreOAuthConsumerSupport içinde readResource öğesine geri getirin.

Tüketici uygulamasını ilkbahar-önyükleme kullanarak oluşturdum.

den: applicationContext.xml

<bean id="oscarService" class="com.mdumontier.oscar.labline.service.OscarService"> 
     <property name="oscarRestTemplate"> 
      <bean class="org.springframework.security.oauth.consumer.client.OAuthRestTemplate"> 
       <constructor-arg ref="oscar" /> 
      </bean> 
     </property> 

    </bean> 

<security:authentication-manager> 
    <security:authentication-provider> 
     <security:user-service> 
     <security:user name="marissa" password="wombat" authorities="ROLE_USER" /> 
     <security:user name="sam" password="kangaroo" authorities="ROLE_USER" /> 
     </security:user-service> 
    </security:authentication-provider> 
    </security:authentication-manager> 

<security:http auto-config='true' > 

    </security:http> 



<oauth:consumer resource-details-service-ref="resourceDetails" oauth-failure-page="/oauth_error.jsp"> 
    <oauth:url pattern="/oscar/**" resources="oscar"/> 
    </oauth:consumer> 


    <oauth:resource-details-service id="resourceDetails"> 
    <oauth:resource id="oscar" 
        key="itd79n64zlwv5hhv" 
        secret="d3psvmrn8k1xws9x" 
        request-token-url="http://localhost:8080/app/ws/oauth/initiate" 
        user-authorization-url="http://localhost:8080/app/ws/oauth/authorize" 
        access-token-url="http://localhost:8080/app/ws/oauth/token"/> 
    </oauth:resource-details-service> 

cevap

0

Yay önyükleme otomatik olarak ana uygulama filtresi zincirinde Filtre uygulayan herhangi bir fasulye kaydeder. Biraz daha fazla ayrıntı için bakınız: https://stackoverflow.com/a/28428154.

oauth: Tüketici yardımcıları hem OAuth filtrelerini hem fasulye olarak kaydeder hem de bir süredir güncellenmemiş gibi görünüyor. En son Spring Boot altında düzgün çalışabilmem için XML ayarını bile alamıyordum. Her neyse, bu her ikisinin de iki kez çalıştırılacağı anlamına gelir ve OAuthConsumerContextFilter durumunda bu, güvenlik alt zincirinin dışında çalışacak ve her zaman başarısız olacağından yıkıcıdır.

Bunu düzeltmek için iki seçeneğiniz vardır.

Bir , otomatik böylece gibi bakmıyor her filtre için bir FilterRegistrationBean sağlayarak bu davranışı önlemek için Bahar Boot için ipucu:

@Bean 
public FilterRegistrationBean registration(OAuthConsumerContextFilter filter) { 
    FilterRegistrationBean registration = new FilterRegistrationBean(filter); 
    registration.setEnabled(false); 
    return registration; 
} 

İki, tamamen XML yapılandırma bypass ve Java yapılandırmayı kullan. Bu yapılandırmada Java yapılandırmasını kullanarak Spring Boot uygulamasında OAuth 1 tüketicisine sahip olmak için tam bir çalışma kodu örneği gönderdim: https://stackoverflow.com/a/42143001/2848158

Java yapılandırması içinde FilterRegistrationBean kodunu tekrarlamanız veya İlk olarak fasulye olarak filtreler, daha doğrusu örnekleri Güvenlik filtresi zinciriyle doğrudan oluşturur ve kaydeder.