コード例 #1
0
        public void Deserialize(string samlResponse)
        {
            ResponseType response = new ResponseType();

            try
            {
                using (TextReader sr = new StringReader(samlResponse))
                {
                    var serializer = new System.Xml.Serialization.XmlSerializer(typeof(ResponseType));
                    response = (ResponseType)serializer.Deserialize(sr);

                    this.Version = response.Version;
                    this.UUID    = response.ID;
                    this.SPUID   = response.InResponseTo;
                    this.Issuer  = response.Issuer.Value;

                    switch (response.Status.StatusCode.Value)
                    {
                    case "urn:oasis:names:tc:SAML:2.0:status:Success":
                        this.RequestStatus = SamlRequestStatus.Success;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:Requester":
                        this.RequestStatus = SamlRequestStatus.RequesterError;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:Responder":
                        this.RequestStatus = SamlRequestStatus.ResponderError;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:VersionMismatch":
                        this.RequestStatus = SamlRequestStatus.VersionMismatchError;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:AuthnFailed":
                        this.RequestStatus = SamlRequestStatus.AuthnFailed;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:InvalidAttrNameOrValue":
                        this.RequestStatus = SamlRequestStatus.InvalidAttrNameOrValue;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:InvalidNameIDPolicy":
                        this.RequestStatus = SamlRequestStatus.InvalidNameIDPolicy;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:NoAuthnContext":
                        this.RequestStatus = SamlRequestStatus.NoAuthnContext;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:NoAvailableIDP":
                        this.RequestStatus = SamlRequestStatus.NoAvailableIDP;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:NoPassive":
                        this.RequestStatus = SamlRequestStatus.NoPassive;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:NoSupportedIDP":
                        this.RequestStatus = SamlRequestStatus.NoSupportedIDP;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:PartialLogout":
                        this.RequestStatus = SamlRequestStatus.PartialLogout;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:ProxyCountExceeded":
                        this.RequestStatus = SamlRequestStatus.ProxyCountExceeded;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:RequestDenied":
                        this.RequestStatus = SamlRequestStatus.RequestDenied;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:RequestUnsupported":
                        this.RequestStatus = SamlRequestStatus.RequestUnsupported;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:RequestVersionDeprecated":
                        this.RequestStatus = SamlRequestStatus.RequestVersionDeprecated;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:RequestVersionTooHigh":
                        this.RequestStatus = SamlRequestStatus.RequestVersionTooHigh;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:RequestVersionTooLow":
                        this.RequestStatus = SamlRequestStatus.RequestVersionTooLow;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:ResourceNotRecognized":
                        this.RequestStatus = SamlRequestStatus.ResourceNotRecognized;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:TooManyResponses":
                        this.RequestStatus = SamlRequestStatus.TooManyResponses;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:UnknownAttrProfile":
                        this.RequestStatus = SamlRequestStatus.UnknownAttrProfile;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:UnknownPrincipal":
                        this.RequestStatus = SamlRequestStatus.UnknownPrincipal;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:UnsupportedBinding":
                        this.RequestStatus = SamlRequestStatus.UnsupportedBinding;
                        break;

                    default:
                        this.RequestStatus = SamlRequestStatus.GenericError;
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
コード例 #2
0
        public void Deserialize(string samlResponse)
        {
            ResponseType response = new ResponseType();

            try
            {
                using (TextReader sr = new StringReader(samlResponse))
                {
                    var serializer = new System.Xml.Serialization.XmlSerializer(typeof(ResponseType));
                    response = (ResponseType)serializer.Deserialize(sr);

                    this.Version = response.Version;
                    this.UUID    = response.ID;
                    this.SPUID   = response.InResponseTo;
                    this.Issuer  = response.Issuer.Value;

                    switch (response.Status.StatusCode.Value)
                    {
                    case "urn:oasis:names:tc:SAML:2.0:status:Success":
                        this.RequestStatus = SamlRequestStatus.Success;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:Requester":
                        this.RequestStatus = SamlRequestStatus.RequesterError;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:Responder":
                        this.RequestStatus = SamlRequestStatus.ResponderError;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:VersionMismatch":
                        this.RequestStatus = SamlRequestStatus.VersionMismatchError;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:AuthnFailed":
                        this.RequestStatus = SamlRequestStatus.AuthnFailed;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:InvalidAttrNameOrValue":
                        this.RequestStatus = SamlRequestStatus.InvalidAttrNameOrValue;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:InvalidNameIDPolicy":
                        this.RequestStatus = SamlRequestStatus.InvalidNameIDPolicy;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:NoAuthnContext":
                        this.RequestStatus = SamlRequestStatus.NoAuthnContext;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:NoAvailableIDP":
                        this.RequestStatus = SamlRequestStatus.NoAvailableIDP;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:NoPassive":
                        this.RequestStatus = SamlRequestStatus.NoPassive;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:NoSupportedIDP":
                        this.RequestStatus = SamlRequestStatus.NoSupportedIDP;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:PartialLogout":
                        this.RequestStatus = SamlRequestStatus.PartialLogout;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:ProxyCountExceeded":
                        this.RequestStatus = SamlRequestStatus.ProxyCountExceeded;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:RequestDenied":
                        this.RequestStatus = SamlRequestStatus.RequestDenied;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:RequestUnsupported":
                        this.RequestStatus = SamlRequestStatus.RequestUnsupported;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:RequestVersionDeprecated":
                        this.RequestStatus = SamlRequestStatus.RequestVersionDeprecated;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:RequestVersionTooHigh":
                        this.RequestStatus = SamlRequestStatus.RequestVersionTooHigh;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:RequestVersionTooLow":
                        this.RequestStatus = SamlRequestStatus.RequestVersionTooLow;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:ResourceNotRecognized":
                        this.RequestStatus = SamlRequestStatus.ResourceNotRecognized;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:TooManyResponses":
                        this.RequestStatus = SamlRequestStatus.TooManyResponses;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:UnknownAttrProfile":
                        this.RequestStatus = SamlRequestStatus.UnknownAttrProfile;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:UnknownPrincipal":
                        this.RequestStatus = SamlRequestStatus.UnknownPrincipal;
                        break;

                    case "urn:oasis:names:tc:SAML:2.0:status:UnsupportedBinding":
                        this.RequestStatus = SamlRequestStatus.UnsupportedBinding;
                        break;

                    default:
                        this.RequestStatus = SamlRequestStatus.GenericError;
                        break;
                    }

                    if (this.RequestStatus == SamlRequestStatus.Success)
                    {
                        foreach (var item in response.Items)
                        {
                            if (item.GetType() == typeof(AssertionType))
                            {
                                AssertionType ass = (AssertionType)item;
                                this.SessionIdExpireDate = (ass.Conditions.NotOnOrAfter != null) ? ass.Conditions.NotOnOrAfter : DateTime.Now.AddMinutes(20);

                                foreach (var subitem in ass.Subject.Items)
                                {
                                    if (subitem.GetType() == typeof(NameIDType))
                                    {
                                        NameIDType nameId = (NameIDType)subitem;
                                        this.SubjectNameId = nameId.Value; //.Replace("SPID-","");
                                    }
                                }

                                foreach (var assItem in ass.Items)
                                {
                                    if (assItem.GetType() == typeof(AuthnStatementType))
                                    {
                                        AuthnStatementType authnStatement = (AuthnStatementType)assItem;
                                        this.SessionId           = authnStatement.SessionIndex;
                                        this.SessionIdExpireDate = (authnStatement.SessionNotOnOrAfterSpecified) ? authnStatement.SessionNotOnOrAfter : this.SessionIdExpireDate;
                                    }

                                    if (assItem.GetType() == typeof(AttributeStatementType))
                                    {
                                        AttributeStatementType statement = (AttributeStatementType)assItem;

                                        foreach (AttributeType attribute in statement.Items)
                                        {
                                            switch (attribute.Name)
                                            {
                                            case "spidCode":
                                                this.User.SpidCode = attribute.AttributeValue[0].ToString();
                                                break;

                                            case "name":
                                                this.User.Name = attribute.AttributeValue[0].ToString();
                                                break;

                                            case "familyName":
                                                this.User.FamilyName = attribute.AttributeValue[0].ToString();
                                                break;

                                            case "gender":
                                                this.User.Gender = attribute.AttributeValue[0].ToString();
                                                break;

                                            case "ivaCode":
                                                this.User.IvaCode = attribute.AttributeValue[0].ToString();
                                                break;

                                            case "companyName":
                                                this.User.CompanyName = attribute.AttributeValue[0].ToString();
                                                break;

                                            case "mobilePhone":
                                                this.User.MobilePhone = attribute.AttributeValue[0].ToString();
                                                break;

                                            case "address":
                                                this.User.Address = attribute.AttributeValue[0].ToString();
                                                break;

                                            case "fiscalNumber":
                                                this.User.FiscalNumber = attribute.AttributeValue[0].ToString();
                                                break;

                                            case "dateOfBirth":
                                                this.User.DateOfBirth = attribute.AttributeValue[0].ToString();
                                                break;

                                            case "placeOfBirth":
                                                this.User.PlaceOfBirth = attribute.AttributeValue[0].ToString();
                                                break;

                                            case "countyOfBirth":
                                                this.User.CountyOfBirth = attribute.AttributeValue[0].ToString();
                                                break;

                                            case "idCard":
                                                this.User.IdCard = attribute.AttributeValue[0].ToString();
                                                break;

                                            case "registeredOffice":
                                                this.User.RegisteredOffice = attribute.AttributeValue[0].ToString();
                                                break;

                                            case "email":
                                                this.User.Email = attribute.AttributeValue[0].ToString();
                                                break;

                                            case "expirationDate":
                                                this.User.ExpirationDate = attribute.AttributeValue[0].ToString();
                                                break;

                                            case "digitalAddress":
                                                this.User.DigitalAddress = attribute.AttributeValue[0].ToString();
                                                break;

                                            default:
                                                break;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                //TODO Log
                throw ex;
            }
        }
コード例 #3
0
 public LogoutResponse()
 {
     RequestStatus = SamlRequestStatus.GenericError;
 }
コード例 #4
0
 public AuthResponse()
 {
     User          = new SpidUserData();
     RequestStatus = SamlRequestStatus.GenericError;
 }