メインコンテンツにスキップ

テンセントクラウド

テンセントクラウド内のSAML IdPとしてのCasdoor

このガイドでは、Casdoorとテンセントクラウドを設定して、テンセントクラウドにCasdoorをSAML IdPとして追加する方法を示します。

Saml MetaDataをコピー

Casdoorで、RSA暗号アルゴリズムを使用したX.509タイプの証明書を追加します。

証明書を追加

次に、Casdoor内のSamlMetadataをコピーします。

Samlメタデータをコピー

テンセントクラウドにSAML IdPを追加

テンセントクラウドにログインし、アクセス管理インターフェースに入ります。

ログインアクセス管理

新しいアイデンティティプロバイダを作成し、以前にコピーしたsamlメタデータをテンセントクラウドにアップロードします。

Saml idpを作成

次に、新しいロールを作成し、以前にアイデンティティプロバイダとして選択したidpプロバイダを選択します。

Samlロールを作成

CasdoorでのSAMLアプリケーションの設定

アプリケーション編集ページで、作成したばかりの証明書を選択します。 リダイレクトURLに使用するテンセントクラウドアプリケーションのドメイン名を追加します。

証明書を選択し、リダイレクトURLを追加

アプリケーション編集ページで、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でのログインにリダイレクト -> テンセントクラウド(ログイン済み)。 今、外部のコードを使用して最初の2ステップをシミュレートし、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)
}

コードを実行して認証URLを取得したら、URLをクリックするとログインをテストできます。 このプロセスのデモを提供します。

最終結果