Перейти к основному содержанию

Облачный сервис Tencent

Casdoor в качестве SAML IdP в облачном сервисе Tencent

Это руководство покажет вам, как настроить Casdoor и облачный сервис Tencent, чтобы добавить Casdoor в качестве SAML IdP в облачный сервис Tencent.

Скопировать метаданные Saml

В Casdoor добавьте сертификат типа X.509 с криптоалгоритмом RSA.

Добавить сертификат

Затем скопируйте SamlMetadata в Casdoor.

Скопировать метаданные Saml

Добавление SAML IdP в облачный сервис Tencent

Войдите в облачный сервис Tencent и перейдите в интерфейс управления доступом.

Вход в систему управления доступом

Создайте новый Поставщиков Удостоверений и загрузите ранее скопированные метаданные saml в облачный сервис Tencent.

Создание saml idp

Затем создайте новую РОЛЬ и выберите ранее созданных Поставщиков Удостоверений в качестве поставщика idp.

Создание saml роли

Настройка SAML приложения в Casdoor

На странице редактирования приложения выберите только что созданный сертификат. Добавьте доменное имя приложения облачного сервиса Tencent, которое вы будете использовать, в URL перенаправления.

Выберите сертификат и добавьте URL перенаправления

На странице редактирования приложения введите ACS URL и настройте Saml Attribute.

Добавить acs url и настроить saml атрибут

Информация о конфигурации для Saml Attribute следующая:

ИмяФормат имениЗначение
https://cloud.tencent.com/SAML/Attributes/RoleНеопределенный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/RoleSessionNameНеопределенныйcasdoor
информация
  • В атрибуте источника роли замените {AccountID}, {RoleName} и {ProviderName} следующим содержимым:
  • Замените {AccountID} на идентификатор вашего аккаунта в облачном сервисе Tencent, который можно просмотреть в Информация об аккаунте - Консоль.
  • Замените {RoleName} на имя созданной вами роли в облачном сервисе Tencent, которое можно просмотреть в Роли - Консоль.
  • Замените {ProviderName} на имя созданного вами поставщика удостоверений SAML в облачном сервисе Tencent, которое можно просмотреть в Поставщики Удостоверений - Консоль.

Вы можете посетить документацию поставщиков удостоверений SAML облачного сервиса Tencent документация, чтобы получить более подробную информацию.

Вход в систему с использованием Casdoor SAML

Общие шаги входа для SAML следующие: Пользователь -> Облачный сервис Tencent (не вошел в систему) -> Перенаправление в Casdoor для входа -> Облачный сервис Tencent (вошел в систему). Теперь используйте код внешне, чтобы смоделировать первые два шага и сгенерировать URL, который перенаправляет в Casdoor. Пример кода:

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

После запуска кода и получения auth URL, клик по URL позволит нам протестировать вход в систему. мы предоставляем демонстрацию этого процесса.

Окончательный результат