Passer au contenu principal

Tencent Cloud

Casdoor comme IdP SAML dans Tencent Cloud

Ce guide vous montrera comment configurer Casdoor et Tencent Cloud pour ajouter Casdoor comme IdP SAML dans Tencent Cloud.

Copier les métadonnées Saml

Dans Casdoor, ajoutez un certificat de type X.509 avec l'algorithme cryptographique RSA.

Ajouter cert

Ensuite, copiez les SamlMetadata dans Casdoor.

Copier les métadonnées Saml

Ajout d'IdP SAML dans Tencent Cloud

Connectez-vous à Tencent Cloud et entrez dans l'interface de gestion des accès.

Connexion Gestion des Accès

Créez un nouveau Fournisseurs d'Identité et téléchargez les métadonnées saml précédemment copiées sur Tencent Cloud.

Saml idp create

Ensuite, créez un nouveau RÔLE et sélectionnez le Fournisseurs d'Identité précédent comme fournisseur idp.

Saml role create

Configuration de l'application SAML dans Casdoor

Sur la page de modification de l'application, sélectionnez le certificat que vous venez de créer. Ajoutez le nom de domaine de l'application Tencent Cloud que vous utiliserez dans les URL de redirection.

Sélectionnez cert et ajoutez des URL de redirection

Sur la page de modification de l'application, entrez l'URL ACS et configurez l'Attribut Saml.

Ajoutez l'url ACS et configurez l'attribut saml

Les informations de configuration pour l'Attribut Saml sont les suivantes :

NomFormat du nomValeur
https://cloud.tencent.com/SAML/Attributes/RoleNon spécifiéqcs::cam::uin/{AccountID}:roleName/{RoleName1};qcs::cam::uin/{AccountID}:roleName/{RoleName2},qcs::cam::uin/{AccountID}:saml-provider/{ProviderName}
https://cloud.tencent.com/SAML/Attributes/RoleSessionNameNon spécifiécasdoor
info
  • Dans l'attribut source du rôle, remplacez {AccountID}, {RoleName} et {ProviderName} par le contenu suivant :
  • Remplacez {AccountID} par votre ID de compte Tencent Cloud, qui peut être consulté dans le Informations sur le compte - Console.
  • Remplacez {RoleName} par le nom du rôle que vous avez créé dans Tencent Cloud, qui peut être consulté dans le Rôles - Console.
  • Remplacez {ProviderName} par le nom du fournisseur d'identité SAML que vous avez créé dans Tencent Cloud, qui peut être consulté dans le Fournisseurs d'Identité - Console.

Vous pouvez visiter la documentation des Fournisseurs d'Identité SAML de Tencent Cloud documentation pour obtenir des informations plus détaillées.

Connexion en utilisant Casdoor SAML

Les étapes générales de connexion pour SAML sont les suivantes : Utilisateur -> Tencent Cloud (non connecté) -> Redirection vers Casdoor pour la connexion -> Tencent Cloud (connecté). Maintenant, utilisez du code externe pour simuler les deux premières étapes et générer une URL qui redirige vers Casdoor. Code d'exemple :

func main() {
res, err := http.Get("your casdoor application saml metadata url")
if err != nil {
panic(err)
}

rawMetadata, err := ioutil.ReadAll(res.Body)
if err != nil {
panic(err)
}

metadata := &types.EntityDescriptor{}
err = xml.Unmarshal(rawMetadata, metadata)
if err != nil {
panic(err)
}

certStore := dsig.MemoryX509CertificateStore{
Roots: []*x509.Certificate{},
}

for _, kd := range metadata.IDPSSODescriptor.KeyDescriptors {
for idx, xcert := range kd.KeyInfo.X509Data.X509Certificates {
if xcert.Data == "" {
panic(fmt.Errorf("metadata certificate(%d) must not be empty", idx))
}
certData, err := base64.StdEncoding.DecodeString(xcert.Data)
if err != nil {
panic(err)
}

idpCert, err := x509.ParseCertificate(certData)
if err != nil {
panic(err)
}

certStore.Roots = append(certStore.Roots, idpCert)
}
}

randomKeyStore := dsig.RandomKeyStoreForTest()

sp := &saml2.SAMLServiceProvider{
IdentityProviderSSOURL: metadata.IDPSSODescriptor.SingleSignOnServices[0].Location,
IdentityProviderIssuer: metadata.EntityID,
ServiceProviderIssuer: "https://cloud.tencent.com",
AssertionConsumerServiceURL: "https://cloud.tencent.com/login/saml",
SignAuthnRequests: true,
AudienceURI: "https://cloud.tencent.com",
IDPCertificateStore: &certStore,
SPKeyStore: randomKeyStore,
}

println("Visit this URL To Authenticate:")
authURL, err := sp.BuildAuthURL("")
if err != nil {
panic(err)
}

println(authURL)
}

Une fois que nous exécutons le code et obtenons l'URL d'authentification, cliquer sur l'URL nous permettra de tester la connexion. nous fournissons une démo de ce processus.

Résultat final