driver.go 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. // Copyright 2019 Yunion
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package awscn
  15. import (
  16. "context"
  17. "fmt"
  18. "yunion.io/x/pkg/errors"
  19. "yunion.io/x/pkg/util/samlutils"
  20. "yunion.io/x/onecloud/pkg/cloudid/models"
  21. "yunion.io/x/onecloud/pkg/mcclient"
  22. "yunion.io/x/onecloud/pkg/util/samlutils/idp"
  23. )
  24. func (d *SAWSCNSAMLDriver) GetIdpInitiatedLoginData(ctx context.Context, userCred mcclient.TokenCredential, managerId string, sp *idp.SSAMLServiceProvider, redirectUrl string) (samlutils.SSAMLIdpInitiatedLoginData, error) {
  25. data := samlutils.SSAMLIdpInitiatedLoginData{}
  26. provider, err := models.CloudproviderManager.FetchProvier(managerId)
  27. if err != nil {
  28. return data, err
  29. }
  30. role, err := provider.GetRole(ctx, userCred.GetUserId())
  31. if err != nil {
  32. return data, err
  33. }
  34. samlProvider, err := provider.GetSamlProvider()
  35. if err != nil {
  36. return data, err
  37. }
  38. data.NameId = userCred.GetUserName()
  39. data.NameIdFormat = samlutils.NAME_ID_FORMAT_PERSISTENT
  40. data.AudienceRestriction = "https://signin.amazonaws.cn/saml"
  41. for _, v := range []struct {
  42. name string
  43. friendlyName string
  44. value string
  45. }{
  46. {
  47. name: "https://aws.amazon.com/SAML/Attributes/Role",
  48. friendlyName: "RoleEntitlement",
  49. value: fmt.Sprintf("%s,%s", role.ExternalId, samlProvider.ExternalId),
  50. },
  51. {
  52. name: "https://aws.amazon.com/SAML/Attributes/RoleSessionName",
  53. friendlyName: "RoleSessionName",
  54. value: userCred.GetUserName(),
  55. },
  56. {
  57. name: "urn:oid:1.3.6.1.4.1.5923.1.1.1.3",
  58. friendlyName: "eduPersonOrgDN",
  59. value: userCred.GetUserName(),
  60. },
  61. } {
  62. data.Attributes = append(data.Attributes, samlutils.SSAMLResponseAttribute{
  63. Name: v.name,
  64. FriendlyName: v.friendlyName,
  65. Values: []string{v.value},
  66. })
  67. }
  68. if len(redirectUrl) == 0 {
  69. redirectUrl = "https://console.amazonaws.cn/"
  70. }
  71. data.RelayState = redirectUrl
  72. return data, nil
  73. }
  74. func (d *SAWSCNSAMLDriver) GetSpInitiatedLoginData(ctx context.Context, userCred mcclient.TokenCredential, cloudAccountId string, sp *idp.SSAMLServiceProvider) (samlutils.SSAMLSpInitiatedLoginData, error) {
  75. // not supported
  76. return samlutils.SSAMLSpInitiatedLoginData{}, errors.ErrNotSupported
  77. }