2015-03-05 10 views
6

W definicji wiosennej zasobu zdalnego, który jest chroniony przez OAuth2, do którego aplikacja kliencka żąda dostępu, ustawiam parametr use-current-uri na wartość true, czyli innymi słowy, bieżący identyfikator URI powinien być używany jako przekierowanie (jeśli jest dostępne). Wygląda to tak:Zabezpieczenie wiosny oauth2 błędnie używa wewnętrznego adresu URL jako bieżącego identyfikatora URI do przekierowania

<oauth:resource id="myResourceId" type="authorization_code" 
    client-id="${clientId}" client-secret="${clientSecret}" 
    access-token-uri="${accessTokenUri}" 
    user-authorization-uri="${userAuthorizationUri}" 
    use-current-uri="true" 
    scope="myScope" 
    pre-established-redirect-uri="${preEstablishedRedirectUri}"/> 

Teraz jest problem, klient Wiosna Bezpieczeństwo OAuth2 wzrośnie bieżący wewnętrzny Tomcat URL zamiast adresu URL aplikacji internetowej publicznego. Scenariusz jest serwer Tomcat siedzi za serwerem Apache, co skutkuje dwoma zestawami adresami:

Ponieważ URL przekierowania aby serwer autoryzacji (np. Twitter, ORCID) mógł użyć do przesłania kodu autoryzacji, należy użyć publicznego adresu URL aplikacji internetowej, a nie wewnętrznego.

Nawiasem mówiąc, używam następującą wersję wiosenno-Security-OAuth2:

  • wiosna-security-oauth2-1.0.5.RELEASE
  • wiosna-core-3.1.2. RELEASE
  • wiosna-security-core-3.1.3.RELEASE

zastanawiać, czy istnieje sposób, aby powiedzieć wiosny do korzystania z publicznego adresu URL. Dzięki.

Odpowiedz

0

Wewnątrz elementu złącza Twojego tomcat conf/server.xml, spróbuj ustawienie adresów URL publiczne, które z przodu Tomcat tak:

<Connector port="8080" protocol="HTTP/1.1" 
      connectionTimeout="20000" 
      redirectPort="8443" 
      proxyName="example.com" 
      proxyPort="443" (or whatever port you are using, same goes for scheme) 
      scheme="https" /> 

wewnętrzny getServerName i getServerPort Metody ten sposób Tomcat rozpocznie podając poprawne wartości, które mam nadzieję, że powinien utwórz poprawny adres URL.

kupili także skonfigurować serwer WWW do żądań spada w http://example.com/users/login do http://localhost:8080/myapplication/users/login jeśli jeszcze tego nie zrobiłeś.

Powiązane problemy