Pular para o conteúdo principal

Tencent Cloud

Casdoor como um SAML IdP no Tencent Cloud

Este guia mostrará como configurar o Casdoor e o Tencent Cloud para adicionar o Casdoor como um SAML IdP no Tencent Cloud.

Copiar Saml MetaData

No Casdoor, adicione um certificado do tipo X.509 com algoritmo criptográfico RSA.

Adicionar certificado

Então copie o SamlMetadata no Casdoor.

Copiar metadados Saml

Adicionando SAML IdP no Tencent Cloud

Faça login no Tencent Cloud e entre na interface de gerenciamento de acesso.

Login Gerenciamento de Acesso

Crie um novo Provedores de Identidade e faça o upload dos metadados saml previamente copiados para o Tencent Cloud.

Criar idp saml

Então crie um novo PAPEL e selecione os Provedores de Identidade previamente como provedor idp.

Criar papel saml

Configurando o aplicativo SAML no Casdoor

Na página de edição do aplicativo, selecione o certificado que você acabou de criar. Adicione o nome de domínio do aplicativo Tencent Cloud que você usará nos URLs de Redirecionamento.

Selecionar certificado e adicionar URLs de redirecionamento

Na página de edição do aplicativo, insira a URL ACS e configure o Atributo Saml.

Adicionar url acs e configurar atributo saml

As informações de configuração para Atributo Saml são as seguintes:

NomeFormato do NomeValor
https://cloud.tencent.com/SAML/Attributes/RoleNão especificadoqcs::cam::uin/{AccountID}:roleName/{RoleName1};qcs::cam::uin/{AccountID}:roleName/{RoleName2},qcs::cam::uin/{AccountID}:saml-provider/{ProviderName}
https://cloud.tencent.com/SAML/Attributes/RoleSessionNameNão especificadocasdoor
informação
  • No atributo fonte de Papel, substitua {AccountID}, {RoleName} e {ProviderName} com o seguinte conteúdo:
  • Substitua {AccountID} pelo ID da sua conta Tencent Cloud, que pode ser visualizado na Informação da Conta - Console.
  • Substitua {RoleName} pelo nome do papel que você criou no Tencent Cloud, que pode ser visualizado na Papéis - Console.
  • Substitua {ProviderName} pelo nome do provedor de identidade SAML que você criou no Tencent Cloud, que pode ser visualizado na Provedores de Identidade - Console.

Você pode visitar a documentação dos Provedores de Identidade SAML do Tencent Cloud para obter mais informações detalhadas.

Fazendo login usando Casdoor SAML

Os passos gerais de login para SAML são os seguintes: Usuário -> Tencent Cloud (não logado) -> Redirecionar para o Casdoor para login -> Tencent Cloud (logado). Agora, use o código externamente para simular os dois primeiros passos e gerar uma URL que redireciona para o Casdoor. Código de exemplo:

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

Uma vez que executamos o código e obtemos a URL de autenticação, clicar na URL nos permitirá testar o login. nós fornecemos uma demonstração deste processo.

Resultado final