跳到主内容

腾讯云

在腾讯云中使用Casdoor作为SAML IdP

本指南将向您展示如何配置Casdoor和腾讯云,以在腾讯云中添加Casdoor作为SAML IdP。

复制Saml元数据

在Casdoor中,添加一种类型为X.509的证书,使用RSA加密算法。

添加证书

然后复制Casdoor中的SamlMetadata。

复制Saml元数据

在腾讯云中添加SAML IdP

登录腾讯云并进入访问管理界面。

登录访问管理

创建一个新的身份提供商并将之前复制的saml元数据上传到腾讯云。

创建Saml idp

然后创建一个新的角色,并选择之前的身份提供商作为idp提供商。

创建Saml角色

在Casdoor中配置SAML应用

在应用编辑页面,选择你刚刚创建的证书。 在重定向URLs中添加你将使用的腾讯云应用的域名。

选择证书并添加重定向URLs

在应用编辑页面,输入ACS URL并配置Saml属性

添加acs url并配置saml属性

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}替换为您的腾讯云账户ID,可以在账户信息 - 控制台中查看。
  • 将{RoleName}替换为您在腾讯云中创建的角色名称,可以在角色 - 控制台中查看。
  • 将{ProviderName}替换为您在腾讯云中创建的SAML身份提供商的名称,可以在身份提供商 - 控制台中查看。

您可以访问腾讯云SAML身份提供商文档以获取更详细的信息。

使用Casdoor SAML登录

SAML的一般登录步骤如下:用户 -> 腾讯云(未登录) -> 重定向到Casdoor进行登录 -> 腾讯云(已登录)。 现在,使用外部代码模拟前两步并生成一个重定向到Casdoor的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,点击URL就可以测试登录了。 我们提供了一个这个过程的演示。

最终结果