تينسنت كلاود
كاسدور كمزود هوية SAML في تينسنت كلاود
هذا الدليل سيوضح لك كيفية تكوين كاسدور وتينسنت كلاود لإضافة كاسدور كمزود هوية SAML في تينسنت كلاود.
نسخ بيانات Saml MetaData
في كاسدور، أضف شهادة من نوع X.509 مع خوارزمية التشفير RSA.
ثم انسخ بيانات SamlMetadata في كاسدور.
إضافة مزود هوية SAML في تينسنت كلاود
تسجيل الدخول إلى تينسنت كلاود والدخول إلى واجهة إدارة الوصول.
أنشئ مزود هوية جديد Identity Providers وقم برفع بيانات saml metadata التي تم نسخها مسبقًا إلى تينسنت كلاود.
ثم أنشئ دورًا جديدًا ROLE واختر مزود الهوية Identity Providers الذي تم إنشاؤه مسبقًا كمزود idp.
تكوين تطبيق SAML في كاسدور
في صفحة تعديل التطبيق، اختر الشهادة التي أنشأتها للتو. أضف اسم النطاق لتطبيق تينسنت كلاود الذي ستستخدمه في Redirect URLs.
في صفحة تعديل التطبيق، أدخل ACS URL وقم بتكوين Saml Attribute.
معلومات التكوين لسمة Saml كالتالي:
الاسم | تنسيق الاسم | القيمة |
---|---|---|
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} بمعرف حساب تينسنت كلاود الخاص بك، والذي يمكن عرضه في معلومات الحساب - الكونسول.
- استبدل {RoleName} باسم الدور الذي أنشأته في تينسنت كلاود، والذي يمكن عرضه في الأدوار - الكونسول.
- استبدل {ProviderName} باسم مزود الهوية SAML الذي أنشأته في تينسنت كلاود، والذي يمكن عرضه في مزودي الهوية - الكونسول.
يمكنك زيارة وثائق مزودي الهوية SAML في تينسنت كلاود التوثيق للحصول على معلومات أكثر تفصيلاً.
تسجيل الدخول باستخدام Casdoor SAML
خطوات تسجيل الدخول العامة لـ SAML كالتالي: المستخدم -> تينسنت كلاود (غير مسجل الدخول) -> إعادة التوجيه إلى كاسدور لتسجيل الدخول -> تينسنت كلاود (مسجل الدخول). الآن، استخدم الكود خارجيًا لمحاكاة الخطوتين الأوليين وتوليد عنوان URL يعيد التوجيه إلى كاسدور. كود العينة:
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، النقر على العنوان سيسمح لنا بتجربة تسجيل الدخول. نحن نوفر عرضًا توضيحيًا لهذه العملية.