Printemps OAuth redirect_uri pas à l'aide de https
J'ai un Ressort de Démarrage 1.3.0 application avec Spring Security OAuth inclus comme une sorte d'intégration SSO.
Le problème est que l'application est en cours d'exécution dans un non-SSL environnement avec un port non standard derrière un répartiteur de charge (F5) que les forces SSL et l'authentification OAuth fournisseur exige que tous les Url de redirection être enregistré comme https, mais le Printemps client OAuth (auto-configuré avec @EnableOAuthSso) ne rediriger vers le OAuth fournisseur avec l'URL suivante...
https://[provider_host]/oauth/autoriser?client_id=[éditer]&redirect_uri=http://[application_host]/login&response_type=code&étendue=[éditer]&etat=IpMYTe
Noter que le retour redirect_uri est généré comme http. Même si la touche F5 va forcer le https sur le chemin du retour, notre OAuth fournisseur ne sera pas permettre à un non-SSL redirect URI. Comment puis-je configurer cela?
À l'exception de mon Ressort des Données JPA contrôleurs, c'est l'intégralité de l'app...
AppConfig.java
@SpringBootApplication(exclude = { HibernateJpaAutoConfiguration.class })
@EnableJpaRepositories
public class AppConfig extends SpringBootServletInitializer {
public static void main(final String... args) {
SpringApplication.run(AppConfig.class, args);
}
@Autowired
public DataSource dataSource;
@Bean(name = "entityManagerFactory")
public LocalContainerEntityManagerFactoryBean getEntityManagerFactoryInfo() {
final LocalContainerEntityManagerFactoryBean fac = new LocalContainerEntityManagerFactoryBean();
fac.setDataSource(dataSource);
fac.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
fac.setPackagesToScan("[redact]");
final Properties props = new Properties();
props.put("hibernate.dialect", "org.hibernate.dialect.SQLServerDialect");
props.put("hibernate.show_sql", "true");
props.put("hibernate.format_sql", "true");
fac.setJpaProperties(props);
return fac;
}
@Bean(name = "transactionManager")
public PlatformTransactionManager getTransactionManager() {
final JpaTransactionManager transactMngr = new JpaTransactionManager();
transactMngr.setEntityManagerFactory(getEntityManagerFactoryInfo().getObject());
return transactMngr;
}
}
SecurityConfig.java
@Configuration
@EnableOAuth2Sso
public class SecurityConfig {
}
application.propriétés
server.port=9916
server.contextPath=
server.use-forward-headers=true
security.oauth2.client.clientId=[redact]
security.oauth2.client.clientSecret=[redact]
security.oauth2.client.scope=[redact]
security.oauth2.client.accessTokenUri=https://[provider_host]/oauth/token
security.oauth2.client.userAuthorizationUri=https://[provider_host]/oauth/authorize
security.oauth2.resource.userInfoUri=https://[provider_host]/oauth/me
security.oauth2.resource.preferTokenInfo=false
logging.level.org.springframework=TRACE
OriginalL'auteur Zack Hoffmann | 2015-11-19
Vous devez vous connecter pour publier un commentaire.
Après avoir creusé manuellement par l'intermédiaire de la configuration des classes, j'ai été capable de trouver et d'ajouter le suivant, qui a fait le tour...
Je ne suis pas convaincu, il n'y a pas de meilleure façon de résoudre le problème de la forcer HTTPS URL de redirection, mais ce correctif a fonctionné pour moi.
Non, j'ai trouvé des informations sur ces en creusant le Printemps des propriétés de métadonnées pour voir qui les haricots, il mappé. Malheureusement, je n'ai pas de piste quelque part.
Ceci m'a sauvé la vie ... grâce à Zack. Ils sont définis dans org.springframework.de sécurité.oauth2.client.jeton.de la subvention.rediriger.AbstractRedirectResourceDetails.
Pouvez-vous donner plein d'exemple de ce avec un dépôt github? Passé tant d'heures, mais toujours coincé avec redirect_uri.
OriginalL'auteur Zack Hoffmann
Vous devez vous assurer que votre application comprend
x-forwarded
les en-têtes de votre équilibreur de charge.Mettre dans mon application.yml fixe mon problème similaire avec une application AWS ELB:
Edit: Cela peut être simplifié avec le plus générique de configuration:
OriginalL'auteur MikeeMike
vous pouvez avoir besoin d'utiliser
spring.oauth2.client.access-token-uri
paramètre de configuration a changé après 1.3.0.M1
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.3.0-M1-Configuration-Changelog
De 0 vote, Comment elle fait pour gérer la redirection après il s'authentifie. OAuth2ClientAuthenticationProcessingfilter est ajouté par l' @@EnableOAuth2Sso donc je n'ai pas de moyen de redirection. La redirection par défaut est "/" (contexte) et encore, il utilise le protocole http. Personne n'a fait ce travail avec succès?
OriginalL'auteur Yuki Yoshida
J'ai eu le même problème.
J'ajoute ces deux paramètres pour forcer le HTTPS dans redirect_uri :
Cela fonctionne : "redirect_uri" est maintenant à l'aide de HTTPS
Vous devez effectuer cette modification dans le Printemps oauth propriétés. Si vous utilisez une configuration distincte vous pouvez utiliser OAuth2RestTemplate et à l'aide d'un OAuth2ProtectedResourceDetails vous pouvez configurer les propriétés. Je l'ai fait et ça fonctionne.
OriginalL'auteur BenoitJ