linagora / linshare

LinShare
https://www.linshare.org/
GNU Affero General Public License v3.0
476 stars 86 forks source link

OIDC SSO AZURE MULTITENANT #300

Open nlonge opened 10 months ago

nlonge commented 10 months ago

Bonjour,

Dans ma dernière "Issue" (#295) nous ne parvenions pas à effectuer une connexion SSO via AzureAD avec OIDC. Cela venait d'un problème de configuration dans mon fichier config.js. Depuis aucun problème pour se connecter depuis notre domaine en utilisant notre tenant.

Nous voudrions désormais mettre en place une configuration qui permettrait de se connecter depuis différents domaines. Pour cela nous avons autorisé le multilocataire (multi tenant) sur notre application Azure AD.

Nous avons donc modifié les fichiers de configs en conséquence :

Lors de la tentative de connexion SSO depuis notre domaine principal ou un autre domaine : error_issuer

Lors d'une tentative de connexion SSO via une adresse microsoft personnelle le consentement est bien demandé. image Notre configuration multitenant (common => tenant pro + perso) est donc correctement configurée au niveau d'Azure. Après le consentement, toujours la même erreur : image

Je vous ajoute le Manifest de notre application dans Azure :

{
    "id": "48dd0b50-3bc1-4860-8143-3a96410186d8",
    "acceptMappedClaims": true,
    "accessTokenAcceptedVersion": 2,
    "addIns": [],
    "allowPublicClient": null,
    "appId": "3f376616-d86f-42de-8e5f-081bbc303e8d",
    "appRoles": [],
    "oauth2AllowUrlPathMatching": false,
    "createdDateTime": "2023-10-17T07:49:47Z",
    "description": null,
    "certification": null,
    "disabledByMicrosoftStatus": null,
    "groupMembershipClaims": null,
    "identifierUris": [
        "api://3f376616-d86f-42de-8e5f-081bbc303e8d"
    ],
    "informationalUrls": {
        "termsOfService": null,
        "support": null,
        "privacy": null,
        "marketing": null
    },
    "keyCredentials": [],
    "knownClientApplications": [],
    "logoUrl": null,
    "logoutUrl": null,
    "name": "TRANSFERT-LINSHARE",
    "notes": null,
    "oauth2AllowIdTokenImplicitFlow": true,
    "oauth2AllowImplicitFlow": false,
    "oauth2Permissions": [
        {
            "adminConsentDescription": "Autoriser l'accès à l'API d'authentification pour Linshare",
            "adminConsentDisplayName": "Linshare Autorisation",
            "id": "8de0429d-ea50-4fbd-ba26-9bd2c657df00",
            "isEnabled": true,
            "lang": null,
            "origin": "Application",
            "type": "Admin",
            "userConsentDescription": null,
            "userConsentDisplayName": null,
            "value": "linshare-scope"
        }
    ],
    "oauth2RequirePostResponse": false,
    "optionalClaims": null,
    "orgRestrictions": [],
    "parentalControlSettings": {
        "countriesBlockedForMinors": [],
        "legalAgeGroupRule": "Allow"
    },
    "passwordCredentials": [
        {
            "customKeyIdentifier": null,
            "endDate": "2025-10-16T19:50:34.901Z",
            "keyId": "bfa9ffc1-3926-452f-ac7c-3d9569e01000",
            "startDate": "2023-10-17T19:50:34.901Z",
            "value": null,
            "createdOn": "2023-10-17T19:50:58.1442932Z",
            "hint": "S30",
            "displayName": "Linshare"
        }
    ],
    "preAuthorizedApplications": [],
    "publisherDomain": "XXX.fr",
    "replyUrlsWithType": [
        {
            "url": "https://XXX.fr/new/oidc/callback",
            "type": "Spa"
        },
        {
            "url": "https://XXX.fr/new/oidc/callback",
            "type": "Spa"
        },
        {
            "url": "https://XXX.fr/oidc/callback",
            "type": "Spa"
        },
        {
            "url": "https://XXX.fr/oidc/callback",
            "type": "Spa"
        }
    ],
    "requiredResourceAccess": [
        {
            "resourceAppId": "00000003-0000-0000-c000-000000000000",
            "resourceAccess": [
                {
                    "id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d",
                    "type": "Scope"
                }
            ]
        }
    ],
    "samlMetadataUrl": null,
    "signInUrl": null,
    "signInAudience": "AzureADandPersonalMicrosoftAccount",
    "tags": [],
    "tokenEncryptionKeyId": null
}

La question est donc de savoir s'il est possible de configurer multi tenant dans Linshare (au niveau du config.js ou linshare.properties) pour une même application AzureAD ? En effet nous avons essayé de préciser plusieurs "authority" ou "oidc.issuerUri" sans résultat. Cette fonctionnalité nous semble essentielle pour nous et permet de garantir un niveau de sécurité non-comparable à des connexions LDAPS (que nous ne voulons plus mettre en place).

De ce que l'on a vu, la configuration multitenant semble possible via LemonSSO mais cela nous impose d'ajouter une nouvelle brique et de passer un temps considérable dans la mise en place d'une nouvelle infrastructure (ce que que nous aimerions éviter).

J'ai essayé de vous donner un maximum d'information, je reste à votre dispo pour tous besoins d'informations complémentaires.

Merci d'avance et bonne journée.

wboudiche commented 10 months ago

Hello For the moment we support only on oidc provider

nlonge commented 10 months ago

Hi, is it planned in your schedule ? thx

wboudiche commented 10 months ago

Hello Actually it's not planned but if it will be paid by a customer was can priorze it