메인 콘텐츠로 건너뛰기

텐센트 클라우드

텐센트 클라우드에서의 Casdoor를 SAML IdP로 사용하기

이 가이드는 Casdoor와 텐센트 클라우드를 설정하여 텐센트 클라우드에서 Casdoor를 SAML IdP로 추가하는 방법을 보여줍니다.

Saml 메타데이터 복사하기

Casdoor에서 RSA 암호 알고리즘을 사용하는 X.509 유형의 인증서를 추가합니다.

인증서 추가

그런 다음 Casdoor에서 SamlMetadata를 복사합니다.

Saml 메타데이터 복사하기

텐센트 클라우드에 SAML IdP 추가하기

텐센트 클라우드에 로그인하고 접근 관리 인터페이스로 이동합니다.

접근 관리 로그인

새로운 Identity Providers를 생성하고 이전에 복사한 saml metadata를 텐센트 클라우드에 업로드합니다.

Saml idp 생성

새로운 ROLE을 생성하고 이전에 선택한 Identity Providers를 idp 제공자로 선택합니다.

Saml 역할 생성

Casdoor에서 SAML 애플리케이션 설정하기

애플리케이션 편집 페이지에서 방금 생성한 인증서를 선택합니다. 사용할 텐센트 클라우드 애플리케이션의 도메인 이름을 Redirect URLs에 추가합니다.

인증서 선택 및 리디렉션 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
정보
  • Role source 속성에서 {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)
}

코드를 실행하고 인증 URL을 얻으면, URL을 클릭하여 로그인을 테스트할 수 있습니다. 이 과정에 대한 데모를 제공합니다.

최종 결과