Both sides previous revision
Previous revision
Next revision
|
Previous revision
|
docpublic:systemes:ssocas:cas7install [2024/06/06 17:17] adminjp [personalisation des views] |
docpublic:systemes:ssocas:cas7install [2024/06/16 09:06] (current) adminjp [Registering Applications] |
| |
<code> | <code> |
[root@cas7d cas-overlay-template]# cp /opt/cas-src/cas-overlay-template/build/libs/cas.war /opt/tomcat/webapps/ | [root@cas7 cas-overlay-template]# cp /opt/cas-src/cas-overlay-template/build/libs/cas.war /opt/tomcat/webapps/ |
| |
[root@cas7d cas-overlay-template]# systemctl start tomcat.service | [root@cas7 cas-overlay-template]# systemctl start tomcat.service |
| |
[root@cas7 cas-overlay-template]# ls -ltr /opt/tomcat/webapps/ | [root@cas7 cas-overlay-template]# ls -ltr /opt/tomcat/webapps/ |
| |
<code> | <code> |
[root@cas6 ~]# cat /etc/httpd/conf.d/cas.conf | [root@cas7 ~]# cat /etc/httpd/conf.d/cas7.conf |
ProxyRequests off | #ProxyRequests off |
ProxyPass /cas ajp://127.0.0.1:8009/idp retry=0 | ProxyPass /cas ajp://127.0.0.1:8009/cas |
ProxyPassReverse /cas ajp://127.0.0.1:8009/idp | ProxyPassReverse /cas ajp://127.0.0.1:8009/cas |
ProxyPass /manager ajp://127.0.0.1:8009/manager | ProxyPass /manager ajp://127.0.0.1:8009/manager |
ProxyPassReverse /manager ajp://127.0.0.1:8009/manager | ProxyPassReverse /manager ajp://127.0.0.1:8009/manager |
| |
</code> | </code> |
| |
| |
==== Registering Applications ==== | ==== Registering Applications ==== |
| |
| * https://jasigcas.readthedocs.io/en/latest/cas-server-documentation/installation/JSON-Service-Management.html |
| |
| |
les appplications clientes autorisées à utiliser notre serveur CAS doivent etre declarée au préalable . cela peut se faire au travers d'un simple fichier de type json . | les appplications clientes autorisées à utiliser notre serveur CAS doivent etre declarée au préalable . cela peut se faire au travers d'un simple fichier de type json . |
| |
nous déclarons dans cas.prpoerties le chemin d'acces a ce fichier json | nous déclarons dans cas.properties le chemin d'acces a ce fichier json |
| |
<code> | <code> |
[root@ssocas6 cas-overlay-template]# tail -2 etc/cas/config/cas.properties | [root@cas7 cas-overlay-template]# grep -b1 service etc/cas/config/cas.properties |
### Registering Applications | 846-### Registering Applications |
cas.serviceRegistry.json.location: file:/etc/cas/services | 876:cas.serviceRegistry.json.location: file:/etc/cas/services |
</code> | </code> |
| |
Il est recommandé de nommer les nouveaux fichiers JSON comme ceci: "serviceName-serviceNumericId.json" | Il est recommandé de nommer les nouveaux fichiers JSON comme ceci: "serviceName-serviceNumericId.json", et de bien reprendre le nom serviceName dans l'attribut "name" |
| |
Pour créer l'ID nous utilisons la commande date +%s | Pour créer l'ID nous utilisons la commande date +%s |
| |
<code> | <code> |
[root@ssocas6 cas-overlay-template]# mkdir /etc/cas/services | [root@cas7 cas-overlay-template]# mkdir /etc/cas/services |
[root@ssocas6 cas-overlay-template]# cd /etc/cas/services | [root@cas7 cas-overlay-template]# cd /etc/cas/services |
[root@ssocas6 services]# touch disi_wikis-`date +%s`.json | [root@cas7 services]# touch disi_star_domain-`date +%s`.json |
[root@ssocas6 services]# vim disi_wikis-1621678622.json | [root@cas7 services]# vim disi_star_domain-1718526946.json |
</code> | </code> |
| |
on peux ensuite ajouter d'autres services (ici un 3eme cf logs CAS [1]) , le serveur CAS lit regulierement le directory /etc/cas/services pour les charger dynamiquement sans necessité de restart de tomcat/cas . | le contenu de la définition de services a autoriser, dans cet exemple RegEx sur tout un domain |
| |
| <code> |
| [root@cas7 services]# cat disi_star_domain-1718526946.json |
| { |
| "@class" : "org.apereo.cas.services.CasRegisteredService", |
| "serviceId" : "https://.*.domain.fr/.*", |
| "name" : "disi_star_domain", |
| "id" : 1718526946, |
| "evaluationOrder" : 40616, |
| "matchingStrategy": { |
| "@class": "org.apereo.cas.services.FullRegexRegisteredServiceMatchingStrategy" |
| } |
| "proxyPolicy" : { |
| "@class" : "org.apereo.cas.services.RegexMatchingRegisteredServiceProxyPolicy", |
| "pattern" : "https?:\/\/.*.domain.fr\/.*" |
| } |
| "attributeReleasePolicy" : { |
| "@class" : "org.apereo.cas.services.ReturnAllAttributeReleasePolicy" |
| } |
| |
| } |
| </code> |
| |
| |
| on peut ensuite ajouter d'autres services (ici un 3eme cf logs CAS [1]) , le serveur CAS lit regulierement le directory /etc/cas/services pour les charger dynamiquement sans necessité de restart de tomcat/cas . |
| |
<code> | <code> |
[root@ssocas6 services]#cat dsi_ws_domain1-fr-1622207781.json | [root@ssocas6 services]#cat dsi_ws_domain1-fr-1622207781.json |
{ | { |
"@class" : "org.apereo.cas.services.RegexRegisteredService", | "@class" : "org.apereo.cas.services.CasRegisteredService", |
"serviceId" : "^https://.*.domain1.fr/.*", | "serviceId" : "^https://.*.domain1.fr/.*", |
"name" : "Dsi_ws-tem-tsp-eu", | "name" : "Dsi_ws-tem-tsp-eu", |
[1] | [1] |
<code> | <code> |
2021-05-28 14:18:03,506 INFO [org.apereo.cas.services.AbstractServicesManager] - <Loaded [3] service(s) from [JsonServiceRegistry].> | 2024-06-16 10:56:43,076 INFO [org.apereo.cas.services.mgmt.AbstractServicesManager] - <Loaded [2] service(s) from [JsonServiceRegistry].> |
</code> | </code> |
| |
* https://fawnoos.com/2020/05/17/cas62x-reloadable-html-views/ | * https://fawnoos.com/2020/05/17/cas62x-reloadable-html-views/ |
* https://fawnoos.com/2021/02/16/cas63-ui-themes/ | * https://fawnoos.com/2021/02/16/cas63-ui-themes/ |
| * https://apereo.github.io/cas/7.0.x/ux/User-Interface-Customization.html |
| |
| |
| |
| |
| </code> |
| |
| |
| List des ressources / fichier modifiables |
| |
| <code> |
| [root@cas7 cas-overlay-template]# ./gradlew listTemplateViews |
| Configuration on demand is an incubating feature. |
| |
| > Task :listTemplateViews |
| /templates/acct-mgmt/casAccountSignupView.html |
| /templates/acct-mgmt/casAccountSignupViewComplete.html |
| /templates/acct-mgmt/casAccountSignupViewCompleted.html |
| /templates/acct-mgmt/casAccountSignupViewSentInfo.html |
| /templates/acct/casMyAccountProfile.html |
| /templates/adaptive-authn/casRiskAuthenticationBlockedView.html |
| /templates/adaptive-authn/casRiskAuthenticationVerifiedView.html |
| /templates/admin/casAdminLoginView.html |
| /templates/aup/casAcceptableUsagePolicyView.html |
| /templates/consent/casConsentView.html |
| /templates/delegated-authn/casDelegatedAuthnErrorView.html |
| /templates/delegated-authn/casDelegatedAuthnSelectionView.html |
| /templates/delegated-authn/casDelegatedAuthnStopWebflow.html |
| /templates/delegated-authn/casDynamicDiscoveryView.html |
| /templates/error.html |
| /templates/error/400.html |
| /templates/error/401.html |
| /templates/error/403.html |
| /templates/error/404.html |
| /templates/error/405.html |
| /templates/error/423.html |
| /templates/error/casServiceErrorView.html |
| /templates/error/casUnauthorizedServiceRedirectView.html |
| /templates/error/casWebflowConfigErrorView.html |
| /templates/forgot-username/casForgotUsernameSendInfoView.html |
| /templates/forgot-username/casForgotUsernameSentInfoView.html |
| /templates/fragments/accountprofileapplications.html |
| /templates/fragments/accountprofileattributes.html |
| /templates/fragments/accountprofileauditlog.html |
| /templates/fragments/accountprofileconsent.html |
| /templates/fragments/accountprofilemfadevices.html |
| /templates/fragments/accountprofilenavigation.html |
| /templates/fragments/accountprofileoverview.html |
| /templates/fragments/accountprofilesecurityquestions.html |
| /templates/fragments/accountprofilesessions.html |
| /templates/fragments/accountprofiletrusteddevices.html |
| /templates/fragments/footer.html |
| /templates/fragments/googleanalytics.html |
| /templates/fragments/header.html |
| /templates/fragments/includes.html |
| /templates/fragments/loginProviders.html |
| /templates/fragments/logindrawer.html |
| /templates/fragments/loginform.html |
| /templates/fragments/loginsidebar.html |
| /templates/fragments/pmlinks.html |
| /templates/fragments/pwdupdateform.html |
| /templates/fragments/qrAuthentication.html |
| /templates/fragments/recaptcha.html |
| /templates/fragments/scripts.html |
| /templates/fragments/serviceui.html |
| /templates/fragments/submitbutton.html |
| /templates/fragments/unlockaccount.html |
| /templates/fragments/webAuthnLogin.html |
| /templates/gauth/casGoogleAuthenticatorConfirmRegistrationView.html |
| /templates/gauth/casGoogleAuthenticatorLoginView.html |
| /templates/gauth/casGoogleAuthenticatorRegistrationView.html |
| /templates/gua/casGuaDisplayUserGraphicsView.html |
| /templates/gua/casGuaGetUserIdView.html |
| /templates/interrupt/casInterruptView.html |
| /templates/inwebo/casInweboCheckResultView.html |
| /templates/inwebo/casInweboErrorView.html |
| /templates/inwebo/casInweboMAAuthnView.html |
| /templates/inwebo/casInweboSelectAuthnView.html |
| /templates/inwebo/casInweboVAAuthnView.html |
| /templates/layout.html |
| /templates/login-error/casAccountDisabledView.html |
| /templates/login-error/casAccountLockedView.html |
| /templates/login-error/casAccountUnlockedView.html |
| /templates/login-error/casAuthenticationBlockedView.html |
| /templates/login-error/casBadHoursView.html |
| /templates/login-error/casBadWorkstationView.html |
| /templates/login-error/casExpiredPassView.html |
| /templates/login-error/casMustChangePassView.html |
| /templates/login/casConfirmView.html |
| /templates/login/casGenericSuccessView.html |
| /templates/login/casLoginMessageView.html |
| /templates/login/casLoginView.html |
| /templates/logout/casConfirmLogoutView.html |
| /templates/logout/casLogoutView.html |
| /templates/logout/casPropagateLogoutView.html |
| /templates/mfa-trusted-devices/casMfaRegisterDeviceView.html |
| /templates/mfa/casCompositeMfaProviderSelectionView.html |
| /templates/mfa/casMfaDeniedView.html |
| /templates/mfa/casMfaUnavailableView.html |
| /templates/password-reset/casPasswordUpdateSuccessView.html |
| /templates/password-reset/casResetPasswordErrorView.html |
| /templates/password-reset/casResetPasswordSendInstructionsView.html |
| /templates/password-reset/casResetPasswordSentInstructionsView.html |
| /templates/password-reset/casResetPasswordVerifyQuestionsView.html |
| /templates/password-reset/casWeakPasswordDetectedView.html |
| /templates/passwordless/casPasswordlessDisplayView.html |
| /templates/passwordless/casPasswordlessGetUserIdView.html |
| /templates/protocol/casPostResponseView.html |
| /templates/protocol/oauth/confirm.html |
| /templates/protocol/oauth/deviceCodeApproval.html |
| /templates/protocol/oauth/deviceCodeApproved.html |
| /templates/protocol/oauth/sessionStaleMismatchError.html |
| /templates/protocol/oidc/confirm.html |
| /templates/radius/casRadiusLoginView.html |
| /templates/saml2-discovery/casSamlIdPDiscoveryView.html |
| /templates/saml2-idp/casSamlIdPErrorView.html |
| /templates/simple-mfa/casSimpleMfaLoginView.html |
| /templates/simple-mfa/casSimpleMfaSelectEmailsView.html |
| /templates/storage/casSessionStorageReadView.html |
| /templates/storage/casSessionStorageWriteView.html |
| /templates/surrogate/casSurrogateAuthnListView.html |
| /templates/surrogate/casSurrogateAuthnWildcardView.html |
| /templates/webauthn/casWebAuthnLoginView.html |
| /templates/webauthn/casWebAuthnRegistrationView.html |
| /templates/wsfed/casWsFedStopWebflow.html |
| /templates/yubikey/casYubiKeyLoginView.html |
| /templates/yubikey/casYubiKeyRegistrationView.html |
| |
| BUILD SUCCESSFUL in 3s |
| 10 actionable tasks: 1 executed, 9 up-to-date |
</code> | </code> |
| |
| |
<code> | <code> |
[root@ssocas6 cas-overlay-template]# ./gradlew getResource -PresourceName=casLoginView.html | [root@cas7 cas-overlay-template]# ./gradlew getResource -PresourceName=casLoginView.html --no-daemon |
| To honour the JVM settings for this build a single-use Daemon process will be forked. For more on this, please refer to https://docs.gradle.org/8.8/userguide/gradle_daemon.html#sec:disabling_the_daemon in the Gradle documentation. |
| Daemon will be stopped at the end of the build |
| Configuration on demand is an incubating feature. |
| |
| > Task :unzipWAR |
| Unzipped WAR into /opt/cas-src/cas-overlay-template/build/app |
| |
> Task :getResource | > Task :getResource |
Copied file /opt/test-6.3-cas-overlay-template/cas-overlay-template/build/cas-resources/templates/casLoginView.html to src/main/resources/templates/casLoginView.html | Copied file /opt/cas-src/cas-overlay-template/build/cas-resources/templates/login/casLoginView.html to /opt/cas-src/cas-overlay-template/src/main/resources/templates/login/casLoginView.html |
</code> | |
| BUILD SUCCESSFUL in 13s |
| 10 actionable tasks: 5 executed, 5 up-to-date |
| |
| [root@cas7 cas-overlay-template]# ls -l /opt/cas-src/cas-overlay-template/src/main/resources/templates/login/ |
| -rw-r--r-- 1 root root 1955 Jun 6 19:34 casLoginView.html |
| |
on va egalement prendre header.html (extrait vers src/main/resources/templates/fragments/header.html) pour y changer le logo | on va egalement prendre header.html (extrait vers src/main/resources/templates/fragments/header.html) pour y changer le logo |
| |
<code> | <code> |
[root@ssocas6 cas-overlay-template]# grep logo src/main/resources/templates/fragments/header.html | [root@cas7 cas-overlay-template]# ./gradlew getResource -PresourceName=header.html --no-daemon |
<img class="cas-logo" | To honour the JVM settings for this build a single-use Daemon process will be forked. For more on this, please refer to https://docs.gradle.org/8.8/userguide/gradle_daemon.html#sec:disabling_the_daemon in the Gradle documentation. |
th:src="@{${#strings.defaultString(#themes.code('cas.logo.file'), '/images/our-logo.png')}}" /> | Daemon will be stopped at the end of the build |
| Configuration on demand is an incubating feature. |
| |
| > Task :getResource |
| Copied file /opt/cas-src/cas-overlay-template/build/cas-resources/templates/fragments/header.html to /opt/cas-src/cas-overlay-template/src/main/resources/templates/fragments/header.html |
| |
| BUILD SUCCESSFUL in 9s |
| 10 actionable tasks: 1 executed, 9 up-to-date |
| [root@cas7d cas-overlay-template]# grep logo /opt/cas-src/cas-overlay-template/src/main/resources/templates/fragments/header.html |
| <img id="cas-logo" class="cas-logo" |
| th:src="@{${#strings.defaultString(#themes.code('cas.logo.file'), '/images/cas-logo.png')}}" |
| |
</code> | </code> |
| |
on peux aussi extraire le cas.logo.png afin de disposer de l'arborescence locale depo des images et y copier notre fichier image / logo | on peut aussi extraire le cas.logo.png afin de disposer de l'arborescence locale depo des images et y copier notre fichier image / logo |
| |
<code> | <code> |
[root@ssocas6 cas-overlay-template]# cp /root/our-logo.png src/main/resources/static/images/ | [root@cas7 cas-overlay-template]# ./gradlew getResource -PresourceName=cas-logo.png --no-daemon |
| > Task :getResource |
| Copied file /opt/cas-src/cas-overlay-template/build/cas-resources/static/images/cas-logo.png to /opt/cas-src/cas-overlay-template/src/main/resources/static/images/cas-logo.png |
</code> | </code> |
| |
| il est possible de recuperer le logo depuis une autre version/machine et de le recopier dans les sources de cette version sous src/main/resources/static/images |
| |
| <code> |
| [root@cas6 resources]# scp static/images/logo_IMTBS-TSP_198x80.png root@cas7d.int-evry.fr:/opt/cas-src/cas-overlay-template/src/main/resources/static/images |
| root@cas7.domain.fr's password: |
| logo_IMTBS-TSP_198x80.png |
| </code> |
| |
| restera a appeler ce fichier dans le cas.css |
| |
| ==== CSS ==== |
| |
| pour les gouts et les couleurs, extraire et modifier //cas.css// |
| |
| <code> |
| [root@cas7 cas-overlay-template]# ./gradlew getResource -PresourceName=cas.css --no-daemon |
| To honour the JVM settings for this build a single-use Daemon process will be forked. For more on this, please refer to https://docs.gradle.org/8.8/userguide/gradle_daemon.html#sec:disabling_the_daemon in the Gradle documentation. |
| Daemon will be stopped at the end of the build |
| Configuration on demand is an incubating feature. |
| |
| > Task :unzipWAR |
| Unzipped WAR into /opt/cas-src/cas-overlay-template/build/app |
| |
| > Task :getResource |
| Copied file /opt/cas-src/cas-overlay-template/build/cas-resources/static/css/cas.css to /opt/cas-src/cas-overlay-template/src/main/resources/static/css/cas.css |
| |
| BUILD SUCCESSFUL in 13s |
| 10 actionable tasks: 5 executed, 5 up-to-date |
| |
| </code> |
| |
| on change par exemple le logo |
| |
| <code> |
| [root@cas7 resources]# diff templates/fragments/header.html.dist templates/fragments/header.html |
| 35c35 |
| < th:src="@{${#strings.defaultString(#themes.code('cas.logo.file'), '/images/cas-logo.png')}}" |
| --- |
| > th:src="@{${#strings.defaultString(#themes.code('cas.logo.file'), '/images/logo_IMTBS-TSP_198x80.png')}}" |
| </code> |
| |
| |
| |
| |
enfin on redeploie le tout (il est possible de faire usage ./gradlew bootRun pour changer les views a chaud) | enfin on redeploie le tout (il est possible de faire usage ./gradlew bootRun pour changer les views a chaud) |
| |
| |
=== lie vers l'URL de changement de password === | ==== lien vers l'URL de changement de password ==== |
| |
il est definit via le password Manamegement link => fragment pmlink a extraire pour trouver le bon lienvers le messages.propeties a modifier | il est definit via le password Manamegement link => fragment pmlink a extraire pour trouver le bon lienvers le messages.propeties a modifier |
| |
<code> | <code> |
#./gradlew getResource -PresourceName=pmlinks | [root@cas7 cas-overlay-template]# ./gradlew getResource -PresourceName=pmlinks --no-daemon |
> Task :getResource | > Task :getResource |
Copied file /opt/test-6.3-cas-overlay-template/cas-overlay-template/build/cas-resources/templates/fragments/pmlinks.html to src/main/resources/templates/fragments/pmlinks.html | Copied file /opt/cas-src/cas-overlay-template/build/cas-resources/templates/fragments/pmlinks.html to /opt/cas-src/cas-overlay-template/src/main/resources/templates/fragments/pmlinks.html |
| |
[root@ssocas6d cas-overlay-template]# grep pwd.example.org src/main/resources/templates/fragments/pmlinks.html | |
<span th:utext="#{screen.pm.button.forgotpwd('https://pwd.example.org')}">Forgot your password?</span> | |
| |
</code> | </code> |
[root@ssocas6dev cas-overlay-template]# grep screen.pm.button.forgotpwd src/main/resources/messages_fr.properties | [root@ssocas6dev cas-overlay-template]# grep screen.pm.button.forgotpwd src/main/resources/messages_fr.properties |
screen.pm.button.forgotpwd=<a href="https://credreset.domain.fr/">Mot de passe oublié ?</a> | screen.pm.button.forgotpwd=<a href="https://credreset.domain.fr/">Mot de passe oublié ?</a> |
</code> | |
| |
=== CSS === | |
| |
pour les gouts et les couleurs, cas.css | |
| |
<code> | |
./gradlew getResource -PresourceName=cas.css | |
> Task :getResource | |
Copied file /opt/test-6.3-cas-overlay-template/cas-overlay-template/build/cas-resources/static/css/cas.css to src/main/resources/static/css/cas.css | |
</code> | </code> |
| |