Nous avons besoin d'une configuration XML Spring Security 5 pour l'authentification dans une application Web utilisant un fournisseur OpenID Connect avec mais je n'ai trouvé que des exemples de configuration Java avec Spring Boot. Il y a beaucoup d'informations déroutantes sur le Web pour OpenID (sans connexion!), L'ancienne extension oauth Spring Security, oauth 2 Login (sans OpenID) ou les implémentations tierces. Actuellement, j'essaie de convertir le code d'OAuth2LoginConfigurer en XML, mais ce n'est pas évident. Il semble y avoir aucun AuthenticationEntryPoint par exemple. Quelqu'un peut-il fournir une configuration XML fonctionnelle pour OpenID Connect?
3 Réponses :
En effet, Spring Security 5 ne prend pas en charge l'espace de noms XML pour la configuration OAuth2Login et ne le sera probablement pas pour la version 5.2.
Le problème en cours lié à ce problème n'a pas beaucoup été support, je vous recommande donc d'exprimer votre soutien si vous souhaitez qu'il soit corrigé.
Malheureusement, cette prise en charge ne sera pas ajoutée dans la prochaine version 5.2. Nous ciblons d'autres éléments de priorité plus élevée pour la version 5.2. En tant que FYI, nous priorisons les tâches en fonction de la demande des utilisateurs et étant donné qu'il n'y a que 2 votes positifs sur ce problème, il n'y a pas beaucoup de demande pour cela. Cela ne veut pas dire que nous n'ajouterons pas le support, cela signifie simplement qu'il est sur la liste de priorité inférieure.
En attendant, j'ai ajouté la prise en charge d'Open ID Connect 1.0 à mon projet actuel en suivant le implémentation de référence MITREid Connect . Bien que le projet ait été implémenté à l'aide de Spring 4, nous avons pu utiliser le client en combinaison avec Spring Security 5 et Spring Security OAuth 2.3.4.
Cette question est maintenant close. La prise en charge de la configuration XML a été ajoutée dans Spring Security 5.3
Jusqu'à ce que le problème github soit résolu dans la sécurité de printemps que nous utilisons un mélange de configuration Java et de configuration XML pour pouvoir modifier les paramètres sans compiler et changer le fichier de configuration XML pour un déploiement spécifique.
<!-- Enable auto-wiring --> <context:annotation-config/> <!-- Scan for auto-wiring classes in spring oauth2 packages --> <context:component-scan base-package="org.springframework.security.oauth2"/> <bean class="org.mypackage.OAuth2LoginConfig"/> <bean class="org.mypackage.OidcRegistrationProperties"> <property name="clientId" value="${clientId}" /> <property name="clientSecret" value="${clientSecret}" /> <property name="clientAuthenticationMethod" value="basic" /> <property name="authorizationGrantType"> <value type="org.springframework.security.oauth2.core.AuthorizationGrantType">authorization_code</value> </property> <property name="redirectUri" value="{baseUrl}/login/oauth2/code/{registrationId}" /> <property name="scopes"> <array> <util:constant static-field="org.springframework.security.oauth2.core.oidc.OidcScopes.OPENID" /> </array> </property> <property name="authorizationUri" value="${authorizationUri}" /> <property name="tokenUri" value="${tokenUri}" /> <property name="userInfoUri" value="${userInfoUri}" /> <property name="userNameAttributeName"> <util:constant static-field="org.springframework.security.oauth2.core.oidc.IdTokenClaimNames.SUB" /> </property> <property name="jwkSetUri" value="${jwkSetUri}" /> <property name="clientName" value="${clientName}" /> </bean>
Les autres réponses font référence à ce problème , qui a été résolu dans Spring Security 5.3. La configuration XML a été documentée dans le 5.3.1 référence par exemple:
<client-registrations> <client-registration registration-id="google-login" client-id="google-client-id" client-secret="google-client-secret" client-authentication-method="basic" authorization-grant-type="authorization_code" redirect-uri="{baseUrl}/login/oauth2/code/{registrationId}" scope="openid,profile,email" client-name="Google" provider-id="google"/> <client-registration registration-id="github-login" client-id="github-client-id" client-secret="github-client-secret" client-authentication-method="basic" authorization-grant-type="authorization_code" redirect-uri="{baseUrl}/login/oauth2/code/{registrationId}" scope="read:user" client-name="Github" provider-id="github"/> <provider provider-id="google" authorization-uri="https://accounts.google.com/o/oauth2/v2/auth" token-uri="https://www.googleapis.com/oauth2/v4/token" user-info-uri="https://www.googleapis.com/oauth2/v3/userinfo" user-info-authentication-method="header" user-info-user-name-attribute="sub" jwk-set-uri="https://www.googleapis.com/oauth2/v3/certs"/> <provider provider-id="github" authorization-uri="https://github.com/login/oauth/authorize" token-uri="https://github.com/login/oauth/access_token" user-info-uri="https://api.github.com/user" user-info-authentication-method="header" user-info-user-name-attribute="id"/> </client-registrations>
Quelques exemples tirés des cas de test:
Exemple minimal p >
<http auto-config="true"> <intercept-url pattern="/**" access="authenticated"/> <oauth2-login login-page="/custom-login"/> </http>
Page de connexion personnalisée
<http auto-config="true"> <oauth2-client/> </http> <client-registrations> <client-registration registration-id="google" client-id="google-client-id" client-secret="google-client-secret" redirect-uri="http://localhost/callback/google" scope="scope1,scope2" provider-id="google"/> </client-registrations>
Inscriptions des clients Google et GitHub
<http> <oauth2-login client-registration-repository-ref="clientRegistrationRepository" authorized-client-repository-ref="authorizedClientRepository" authorized-client-service-ref="authorizedClientService" authorization-request-repository-ref="authorizationRequestRepository" authorization-request-resolver-ref="authorizationRequestResolver" access-token-response-client-ref="accessTokenResponseClient" user-authorities-mapper-ref="userAuthoritiesMapper" user-service-ref="oauth2UserService" oidc-user-service-ref="oidcUserService" login-processing-url="/login/oauth2/code/*" login-page="/login" authentication-success-handler-ref="authenticationSuccessHandler" authentication-failure-handler-ref="authenticationFailureHandler" jwt-decoder-factory-ref="jwtDecoderFactory"/> </http>