request.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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 samlutils
  15. import (
  16. "encoding/xml"
  17. "time"
  18. "yunion.io/x/pkg/util/timeutils"
  19. )
  20. type SSAMLRequestInput struct {
  21. AssertionConsumerServiceURL string
  22. Destination string
  23. RequestID string
  24. EntityID string
  25. }
  26. func NewRequest(input SSAMLRequestInput) AuthnRequest {
  27. nowStr := timeutils.IsoTime(time.Now().UTC())
  28. req := AuthnRequest{
  29. XMLName: xml.Name{
  30. Space: XMLNS_PROTO,
  31. Local: "AuthnRequest",
  32. },
  33. AssertionConsumerServiceURL: input.AssertionConsumerServiceURL,
  34. Destination: input.Destination,
  35. ForceAuthn: "false",
  36. ID: input.RequestID,
  37. IsPassive: "false",
  38. IssueInstant: nowStr,
  39. ProtocolBinding: BINDING_HTTP_POST,
  40. Version: SAML2_VERSION,
  41. Issuer: Issuer{
  42. XMLName: xml.Name{
  43. Space: XMLNS_ASSERT,
  44. Local: "Issuer",
  45. },
  46. Issuer: input.EntityID,
  47. },
  48. NameIDPolicy: NameIDPolicy{
  49. XMLName: xml.Name{
  50. Space: XMLNS_PROTO,
  51. Local: "NameIDPolicy",
  52. },
  53. AllowCreate: "true",
  54. Format: NAME_ID_FORMAT_TRANSIENT,
  55. // SPNameQualifier: input.EntityID,
  56. },
  57. }
  58. return req
  59. }