Zum Hauptinhalt springen

Tencent Cloud

Casdoor als SAML IdP in Tencent Cloud

Diese Anleitung zeigt Ihnen, wie Sie Casdoor und Tencent Cloud konfigurieren, um Casdoor als SAML IdP in Tencent Cloud hinzuzufügen.

Kopiere Saml MetaData

In Casdoor fügen Sie ein Zertifikat vom Typ X.509 mit RSA-Kryptoalgorithmus hinzu.

Zertifikat hinzufügen

Dann kopieren Sie die SamlMetadata in Casdoor.

Kopiere Saml-Metadaten

Hinzufügen eines SAML IdP in Tencent Cloud

Melden Sie sich bei Tencent Cloud an und betreten Sie die Zugriffsverwaltungsschnittstelle.

Login Zugriffsverwaltung

Erstellen Sie einen neuen Identity Providers und laden Sie die zuvor kopierten saml metadata in Tencent Cloud hoch.

Saml idp erstellen

Dann erstellen Sie eine neue ROLLE und wählen Sie den zuvor erstellten Identity Providers als IdP-Anbieter aus.

Saml Rolle erstellen

Konfigurieren der SAML-Anwendung in Casdoor

Auf der Seite zur Bearbeitung der Anwendung wählen Sie das Zertifikat aus, das Sie gerade erstellt haben. Fügen Sie den Domainnamen der Tencent Cloud-Anwendung, die Sie verwenden werden, in die Redirect URLs ein.

Zertifikat auswählen und Redirect-URLs hinzufügen

Auf der Seite zur Bearbeitung der Anwendung geben Sie die ACS URL ein und konfigurieren das Saml Attribut.

ACS-URL hinzufügen und Saml-Attribut konfigurieren

Die Konfigurationsinformationen für Saml-Attribut sind wie folgt:

NameName FormatWert
https://cloud.tencent.com/SAML/Attributes/RoleUnspezifiziertqcs::cam::uin/{AccountID}:roleName/{RoleName1};qcs::cam::uin/{AccountID}:roleName/{RoleName2},qcs::cam::uin/{AccountID}:saml-provider/{ProviderName}
https://cloud.tencent.com/SAML/Attributes/RoleSessionNameUnspezifiziertcasdoor
Info
  • Im Attribut Quelle der Rolle ersetzen Sie {AccountID}, {RoleName} und {ProviderName} mit dem folgenden Inhalt:
  • Ersetzen Sie {AccountID} mit Ihrer Tencent Cloud-Konto-ID, die im Konto-Informationen - Konsole eingesehen werden kann.
  • Ersetzen Sie {RoleName} mit dem Rollennamen, den Sie in Tencent Cloud erstellt haben, der im Rollen - Konsole eingesehen werden kann.
  • Ersetzen Sie {ProviderName} mit dem Namen des SAML-Identitätsanbieters, den Sie in Tencent Cloud erstellt haben, der im Identity Providers - Konsole eingesehen werden kann.

Sie können die Tencent Cloud SAML Identity Providers Dokumentation besuchen, um detailliertere Informationen zu erhalten.

Anmeldung mit Casdoor SAML

Die allgemeinen Anmeldeschritte für SAML sind wie folgt: Benutzer -> Tencent Cloud (nicht angemeldet) -> Weiterleitung zu Casdoor für die Anmeldung -> Tencent Cloud (angemeldet). Jetzt verwenden wir externen Code, um die ersten beiden Schritte zu simulieren und eine URL zu generieren, die zu Casdoor weiterleitet. Beispielcode:

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)
}

Wenn wir den Code ausführen und die auth URL erhalten, ermöglicht uns das Klicken auf die URL, die Anmeldung zu testen. Wir bieten eine Demo dieses Prozesses an.

Endergebnis