コード例 #1
0
        public void Token19Test()
        {
            NameValueCollection headers = new NameValueCollection()
            {
                { "X-Version", "1.9" },
                { "X-AUTHENTICATE-participantId", "AT:L6:1234789" },
                { "X-AUTHENTICATE-UserId", "*****@*****.**" },
                { "X-AUTHENTICATE-cn", "Max Mustermann" },
                { "X-AUTHENTICATE-gvGid", "AT:B:0:LxXnvpcYZesiqVXsZG0bB==" },
                { "X-AUTHENTICATE-gvOuId", "AT:GGA-60420:0815" },
                { "X-AUTHENTICATE-Ou", "Meldeamt" },
                { "X-AUTHENTICATE-gvOuOKZ", "AT:GGA-60420-Abt13" },
                { "X-AUTHENTICATE-mail", "*****@*****.**" },
                { "X-AUTHENTICATE-tel", "+43 3155 5153" },
                { "X-AUTHENTICATE-gvSecClass", "2" },
                { "X-AUTHORIZE-roles", "Beispielrolle(GKZ=60420)" },
                { "X-AUTHORIZE-roles", "Beispielrolle2(ABC=XYZ, DEF=4711)" },
            };
            PvpToken token = new PvpToken(headers);

            Assert.AreEqual(PvpVersion.Version19, token.Version);
            Assert.AreEqual("*****@*****.**", token.GetAttributeValue(PvpAttributes.USERID));
            Assert.AreEqual("Beispielrolle(GKZ=60420);Beispielrolle2(ABC=XYZ, DEF=4711)",
                            token.GetAttributeValue(PvpAttributes.ROLES));
        }
コード例 #2
0
        public void TwoLinesTest()
        {
            NameValueCollection headers = new NameValueCollection();

            headers.Add("X-Version", "1.9");
            headers.Add("X-Authorize-roles", "R1(p1=v1);R2(p1=v1,p1=v2,p2=v2)");
            headers.Add("X-Authorize-roles", "R1(p1=v2);R3(p1=v1,p1=v2,p2=v2)");
            PvpToken          token         = new PvpToken(headers);
            PvpAttributeRoles authorization = token.RoleAttribute;

            Assert.AreEqual(3, authorization.Roles.Count);

            PvpRole role1 = authorization.GetRole("r1");

            Assert.IsNotNull(role1);
            Assert.AreEqual(1, role1.Parameters.Count);
            Assert.AreEqual("p1", role1.Parameters.GetKey(0));
            Assert.AreEqual("v1,v2", role1.Parameters["p1"]);

            PvpRole role2 = authorization.GetRole("r2");

            Assert.IsNotNull(role2);
            Assert.AreEqual(2, role2.Parameters.Count);
            Assert.AreEqual("p2", role2.Parameters.GetKey(1));
            Assert.AreEqual("v1,v2", role2.Parameters["p1"]);
            Assert.AreEqual("v2", role2.Parameters["p2"]);

            PvpRole role3 = authorization.GetRole("r3");

            Assert.IsNotNull(role3);
            Assert.AreEqual(2, role3.Parameters.Count);
            Assert.AreEqual("p1", role3.Parameters.GetKey(0));
            Assert.AreEqual("v1,v2", role3.Parameters["p1"]);
            Assert.AreEqual("v2", role2.Parameters["p2"]);
        }
コード例 #3
0
    public CustomAuthorization GetAuthorization(string rootUrl, string userId)
    {
        if (rootUrl.Equals("dummy", StringComparison.InvariantCultureIgnoreCase))
        {
            var version  = "1.9";
            var pvpToken = new PvpToken(new Dictionary <PvpAttributes, string>()
            {
                { PvpAttributes.VERSION, version },
                { PvpAttributes.PARTICIPANT_ID, "AT:L6:1234789" },
                { PvpAttributes.USERID, "egovstar.appserv1.intra.xyz.gv.at" },
                { PvpAttributes.X_AUTHENTICATE_cn, "Anwendung 1 Register-Interface" },
                { PvpAttributes.OU_GV_OU_ID, "AT:L6:4711" },
                { PvpAttributes.OU, "Fachabteilung 1B Informationstechnik" },
                { PvpAttributes.SECCLASS, "2" },
                { PvpAttributes.ROLES, "FixedRole(param=value)" },
            }, false);

            CustomAuthorization auth = new CustomAuthorization();
            auth.TimeToLive            = 60 * 10; //10 Minuten
            auth.PvpVersion            = version;
            auth.SoapHeaderXmlFragment = pvpToken.GetSystemPrincipalSoapFragment();

            return(auth);
        }

        return(CustomAuthorization.NoAuthorization);
    }
コード例 #4
0
 public PvpToken GetPvpToken()
 {
     if (_pvpToken == null)
     {
         _pvpToken = new PvpToken(GetValueCollection(), true);
     }
     return(_pvpToken);
 }
コード例 #5
0
 public void InvalidTokenTest()
 {
     NameValueCollection headers = new NameValueCollection()
     {
         { "X-Version", "1.7" },
     };
     PvpToken token = new PvpToken(headers);
 }
コード例 #6
0
        public void SystemPrincipalTest()
        {
            PvpToken token = new PvpToken(GetNameValueCollection19());
            var      xml   = token.GetSystemPrincipalSoapFragment();

            Assert.AreEqual("<pvpToken version=\"1.9\" xmlns=\"http://egov.gv.at/pvp1.xsd\"><authenticate><participantId>AT:L6:1234789</participantId><systemPrincipal><userId>[email protected]</userId><cn>Max Mustermann</cn><gvOuId>AT:GGA-60420:0815</gvOuId><ou>Meldeamt</ou><gvOuOKZ>AT:GGA-60420-Abt13</gvOuOKZ><gvSecClass>2</gvSecClass></systemPrincipal></authenticate><authorize><role value=\"Beispielrolle\"><param><key>GKZ</key><value>60420</value></param></role></authorize></pvpToken>"
                            , xml.OuterXml);
        }
コード例 #7
0
 public void VersionEmptyTest()
 {
     Dictionary <PvpAttributes, string> values = new Dictionary <PvpAttributes, string>()
     {
         { PvpAttributes.VERSION, String.Empty },
         { PvpAttributes.MAIL, "*****@*****.**" }
     };
     var token = new PvpToken(values, false);
 }
コード例 #8
0
        public void AttributeNotDefinedTest()
        {
            NameValueCollection headers = new NameValueCollection()
            {
                { "X-PVP-Version", "2.1" },
            };
            PvpToken token = new PvpToken(headers);

            token.Attributes.Add(new PvpAttributeCn("blabla"));
        }
コード例 #9
0
 public void MultipleValueTest()
 {
     NameValueCollection headers = new NameValueCollection()
     {
         { "X-AUTHENTICATE-gvGid", "test1" },
         { "X-AUTHENTICATE-gvGid", "test2" },
         { "X-Version", "1.9" },
     };
     PvpToken token = new PvpToken(headers);
 }
コード例 #10
0
        public void Token21Test()
        {
            NameValueCollection headers = GetNameValueCollection21();
            PvpToken            token   = new PvpToken(headers);

            Assert.AreEqual(PvpVersion.Version21, token.Version);
            Assert.AreEqual("*****@*****.**", token.GetAttributeValue(PvpAttributes.USERID));
            Assert.AreEqual("Beispielrolle(GKZ=60420);Beispielrolle2(ABC=XYZ, DEF=4711)",
                            token.GetAttributeValue(PvpAttributes.ROLES));
        }
コード例 #11
0
        public void SamlTest()
        {
            PvpToken token = new PvpToken(PvpVersion.Version21);

            token.Attributes.Add(new PvpAttributeUserId("*****@*****.**"));
            token.Attributes.Add(new PvpAttributeRoles("Test(A=1)"));
            string xml = token.GetSamlAttributeStatement().OuterXml;

            Assert.IsTrue(xml.StartsWith("<AttributeStatement ID="));
            Assert.IsTrue(xml.EndsWith(" Version=\"2.0\" xmlns=\"urn:oasis:names:tc:SAML:2.0:assertion\"><Attribute Name=\"urn:oid:1.2.40.0.10.2.1.1.261.10\" FriendlyName=\"PVP-VERSION\" NameFormat=\"urn:oasis:names:tc:SAML:2.0:attrname-format:uri\"><AttributeValue>2.1</AttributeValue></Attribute><Attribute Name=\"urn:oid:0.9.2342.19200300.100.1.1\" FriendlyName=\"USERID\" NameFormat=\"urn:oasis:names:tc:SAML:2.0:attrname-format:uri\"><AttributeValue>[email protected]</AttributeValue></Attribute><Attribute Name=\"urn:oid:1.2.40.0.10.2.1.1.261.30\" FriendlyName=\"ROLES\" NameFormat=\"urn:oasis:names:tc:SAML:2.0:attrname-format:uri\"><AttributeValue>Test(A=1)</AttributeValue></Attribute></AttributeStatement>"));
            //var x="<AttributeStatement ID=\"_aeb030e8-055d-4618-b0df-b8a0dcc4dd60\" Version=\"2.0\" xmlns=\"urn:oasis:names:tc:SAML:2.0:assertion\"><Attribute Name=\"urn:oid:1.2.40.0.10.2.1.1.261.10\" FriendlyName=\"PVP-VERSION\" NameFormat=\"urn:oasis:names:tc:SAML:2.0:attrname-format:uri\"><AttributeValue>2.1</AttributeValue></Attribute><Attribute Name=\"urn:oid:0.9.2342.19200300.100.1.1\" FriendlyName=\"USERID\" NameFormat=\"urn:oasis:names:tc:SAML:2.0:attrname-format:uri\"><AttributeValue>[email protected]</AttributeValue></Attribute><Attribute Name=\"urn:oid:1.2.40.0.10.2.1.1.261.30\" FriendlyName=\"ROLES\" NameFormat=\"urn:oasis:names:tc:SAML:2.0:attrname-format:uri\"><AttributeValue>Test(A=1)</AttributeValue></Attribute></AttributeStatement>"
        }
コード例 #12
0
        public void NewToken18Test()
        {
            PvpToken token18 = new PvpToken(PvpVersion.Version18);

            Assert.AreEqual(PvpVersion.Version18, token18.Version);
            var userId = new PvpAttributeUserId();

            userId.Value = "abc";
            token18.Attributes.Add(userId);
            Assert.AreEqual(PvpVersion.Version18, userId.CurrentVersion);
            Assert.AreEqual("abc", userId.Value);
            Assert.AreEqual("X-AUTHENTICATE-UserID", userId.GetHeaderName());
            Assert.AreEqual("1.8", token18.GetAttributeValue(PvpAttributes.VERSION));
        }
コード例 #13
0
        public void NewToken20Test()
        {
            PvpToken token20 = new PvpToken(PvpVersion.Version20);

            Assert.AreEqual(PvpVersion.Version20, token20.Version);
            var userId = new PvpAttributeUserId();

            userId.Value = "abc";
            token20.Attributes.Add(userId);
            Assert.AreEqual(PvpVersion.Version20, userId.CurrentVersion);
            Assert.AreEqual("abc", userId.Value);
            Assert.AreEqual("X-PVP-USERID", userId.GetHeaderName());
            Assert.AreEqual("2.0", token20.GetAttributeValue(PvpAttributes.VERSION));
        }
コード例 #14
0
        public void OrderTest()
        {
            NameValueCollection headers = new NameValueCollection()
            {
                { "X-Version", "1.9" },
                { "X-AUTHENTICATE-UserId", "*****@*****.**" },
                { "X-AUTHENTICATE-cn", "Max Mustermann" },
                { "X-AUTHENTICATE-gvGid", "AT:B:0:LxXnvpcYZesiqVXsZG0bB==" },
                { "X-AUTHORIZE-roles", "Beispielrolle(GKZ=60420)" },
                { "X-AUTHENTICATE-gvOuId", "AT:GGA-60420:0815" },
                { "X-AUTHENTICATE-participantId", "AT:L6:1234789" },
                { "X-AUTHENTICATE-Ou", "Meldeamt" },
                { "X-AUTHENTICATE-gvOuOKZ", "AT:GGA-60420-Abt13" },
                { "X-AUTHENTICATE-mail", "*****@*****.**" },
                { "X-AUTHENTICATE-tel", "+43 3155 5153" },
                { "X-AUTHENTICATE-gvSecClass", "2" },
            };
            PvpToken token       = new PvpToken(headers);
            var      httpHeaders = token.GetHeaders();

            Assert.That(httpHeaders[0].Name, Is.EqualTo("X-Version"));
            Assert.That(httpHeaders[1].Name, Is.EqualTo("X-AUTHENTICATE-participantId"));
            Assert.That(httpHeaders[2].Name, Is.EqualTo("X-AUTHENTICATE-UserID"));
            Assert.That(httpHeaders[3].Name, Is.EqualTo("X-AUTHENTICATE-cn"));
            Assert.That(httpHeaders[4].Name, Is.EqualTo("X-AUTHENTICATE-gvOuId"));
            Assert.That(httpHeaders[5].Name, Is.EqualTo("X-AUTHENTICATE-Ou"));
            Assert.That(httpHeaders[6].Name, Is.EqualTo("X-AUTHENTICATE-gvOuOKZ"));
            Assert.That(httpHeaders[7].Name, Is.EqualTo("X-AUTHENTICATE-gvSecClass"));
            Assert.That(httpHeaders[8].Name, Is.EqualTo("X-AUTHENTICATE-mail"));
            Assert.That(httpHeaders[9].Name, Is.EqualTo("X-AUTHENTICATE-tel"));
            Assert.That(httpHeaders[10].Name, Is.EqualTo("X-AUTHENTICATE-gvGid"));
            Assert.That(httpHeaders[11].Name, Is.EqualTo("X-AUTHORIZE-roles"));

            var token21       = token.ConvertTo(PvpVersion.Version21);
            var http21Headers = token21.GetHeaders();

            Assert.That(http21Headers[0].Name, Is.EqualTo("X-PVP-VERSION"));
            Assert.That(http21Headers[1].Name, Is.EqualTo("X-PVP-SECCLASS"));
            Assert.That(http21Headers[2].Name, Is.EqualTo("X-PVP-PRINCIPAL-NAME"));
            Assert.That(http21Headers[3].Name, Is.EqualTo("X-PVP-USERID"));
            Assert.That(http21Headers[4].Name, Is.EqualTo("X-PVP-GID"));
            Assert.That(http21Headers[5].Name, Is.EqualTo("X-PVP-MAIL"));
            Assert.That(http21Headers[6].Name, Is.EqualTo("X-PVP-TEL"));
            Assert.That(http21Headers[7].Name, Is.EqualTo("X-PVP-PARTICIPANT-ID"));
            Assert.That(http21Headers[8].Name, Is.EqualTo("X-PVP-OU-OKZ"));
            Assert.That(http21Headers[9].Name, Is.EqualTo("X-PVP-OU-GV-OU-ID"));
            Assert.That(http21Headers[10].Name, Is.EqualTo("X-PVP-OU"));
            Assert.That(http21Headers[11].Name, Is.EqualTo("X-PVP-ROLES"));
        }
コード例 #15
0
        public void HasRoleTest()
        {
            PvpToken token = new PvpToken(PvpVersion.Version20);

            token.Attributes.Add(new PvpAttributeRoles("R1(p1=v1);R2(p1=v1,p1=v2,p2=v2);R3(GKZ)"));
            Assert.IsTrue(token.RoleAttribute.HasRole(new PvpRole("R1")));
            Assert.IsTrue(token.RoleAttribute.HasRole(PvpRole.Parse("R1(p1=v1)")));
            Assert.IsTrue(token.RoleAttribute.HasRole(PvpRole.Parse("R2(p1=v1,p1=v2,p2=v2)")));
            Assert.IsTrue(token.RoleAttribute.HasRole(new PvpRole("R2")));
            Assert.IsTrue(token.RoleAttribute.HasRole(PvpRole.Parse("R2()")));
            Assert.IsFalse(token.RoleAttribute.HasRole(PvpRole.Parse("R4")));
            Assert.IsFalse(token.RoleAttribute.HasRole(PvpRole.Parse("R1(p1=v2)")));
            Assert.IsFalse(token.RoleAttribute.HasRole(PvpRole.Parse("R1(p1=v2)")));
            Assert.IsTrue(token.RoleAttribute.HasRole(new PvpRole("R3")));
            Assert.IsTrue(token.RoleAttribute.HasRole(PvpRole.Parse("R3(Gkz)")));
        }
コード例 #16
0
        public void MultipleAttributesTest()
        {
            NameValueCollection headers = new NameValueCollection()
            {
                { "X-Version", "1.9" },
                { "X-AUTHENTICATE-participantId", "AT:L6:1234789" },
            };
            PvpToken             token    = new PvpToken(headers);
            PvpAttributeFunction function = new PvpAttributeFunction("SachbearbeiterIn");

            token.Attributes.Add(function);
            Assert.AreEqual(3, token.Attributes.Count);
            Assert.AreEqual("SachbearbeiterIn", token.GetAttributeValue(PvpAttributes.FUNCTION));

            PvpAttributeParticipantId participantId = new PvpAttributeParticipantId("AT:L9:Wien");

            token.Attributes.Add(participantId);
        }
コード例 #17
0
        public void ParseTokenTest()
        {
            NameValueCollection headers     = GetNameValueCollection21();
            PvpToken            token       = new PvpToken(headers);
            PvpToken            parsedToken = new PvpToken(token.GetSamlAttributeStatement());

            Assert.AreEqual(PvpVersion.Version21, parsedToken.Version);
            Assert.AreEqual("*****@*****.**", parsedToken.GetAttributeValue(PvpAttributes.USERID));
            Assert.AreEqual("Beispielrolle(GKZ=60420);Beispielrolle2(ABC=XYZ, DEF=4711)",
                            parsedToken.GetAttributeValue(PvpAttributes.ROLES));
            foreach (HttpHeader header in parsedToken.GetHeaders())
            {
                if (header.Name.Equals("X-PVP-roles", StringComparison.InvariantCultureIgnoreCase))
                {
                    continue;
                }

                Assert.AreEqual(headers[header.Name], header.Value, "Fehler bei " + header.Name);
            }
        }
コード例 #18
0
        private XmlNode GetChainedToken(XmlElement removedPvpToken)
        {
            // neither http headers nor soap headers avaiable
            if (removedPvpToken == null && _headers == null)
            {
                return(null);
            }

            if (_headers != null && PvpToken.DeterminePvpVersion(_headers).HasValue)
            {
                PvpToken chainedToken = new PvpToken(_headers);

                // Use http header if possible
                if (chainedToken.ParticipantId != null)
                {
                    return(chainedToken.GetChainedSoapFragment());
                }
            }

            // http headers available, but not sufficent
            if (removedPvpToken == null)
            {
                return(null);
            }

            XmlDocument tempDoc       = new XmlDocument();
            XmlNode     chainedNode   = tempDoc.CreateElement(_pvpChainedTokenTag, _pvpTokenNS);
            XmlNode     importedToken = tempDoc.ImportNode(removedPvpToken, true);

            foreach (XmlNode child in importedToken.ChildNodes)
            {
                chainedNode.AppendChild(child);
            }
            foreach (XmlAttribute a in importedToken.Attributes)
            {
                chainedNode.Attributes.Append((XmlAttribute)a.Clone());
            }
            return(chainedNode);
        }
コード例 #19
0
        public void ParseSamlValuesTest()
        {
            NameValueCollection headers   = GetNameValueCollection21();
            PvpToken            token     = new PvpToken(headers);
            XElement            statement = XElement.Parse(token.GetSamlAttributeStatement().OuterXml);
            var values = statement.Elements(PvpToken.SamlXNamespace + "Attribute").ToDictionary(a => a.Attribute("Name").Value,
                                                                                                a =>
                                                                                                a.Elements(PvpToken.SamlXNamespace + "AttributeValue").Select(v => v.Value).ToList());
            PvpToken parsedToken = new PvpToken(values);

            Assert.AreEqual(PvpVersion.Version21, parsedToken.Version);
            Assert.AreEqual("*****@*****.**", parsedToken.GetAttributeValue(PvpAttributes.USERID));
            Assert.AreEqual("Beispielrolle(GKZ=60420);Beispielrolle2(ABC=XYZ, DEF=4711)",
                            parsedToken.GetAttributeValue(PvpAttributes.ROLES));
            foreach (HttpHeader header in parsedToken.GetHeaders())
            {
                if (header.Name.Equals("X-PVP-roles", StringComparison.InvariantCultureIgnoreCase))
                {
                    continue;
                }

                Assert.AreEqual(headers[header.Name], header.Value, "Fehler bei " + header.Name);
            }
        }
コード例 #20
0
        public void ChainedTokenTest()
        {
            var      headers = GetNameValueCollection19();
            PvpToken token   = new PvpToken(headers);
            string   result  = token.GetChainedSoapFragment().OuterXml;

            Assert.IsTrue(
                result.Contains(
                    @"<pvpChainedToken version=""1.9"" xmlns=""http://egov.gv.at/pvp1.xsd"">"))
            ;
            Assert.IsTrue(result.Contains("<participantId>AT:L6:1234789</participantId>"));
            Assert.IsTrue(result.Contains("<userId>[email protected]</userId>"));
            Assert.IsTrue(result.Contains("<cn>Max Mustermann</cn>"));
            Assert.IsTrue(result.Contains("<ou>Meldeamt</ou>"));
            Assert.IsTrue(result.Contains("<gvOuOKZ>AT:GGA-60420-Abt13</gvOuOKZ>"));
            Assert.IsTrue(result.Contains("<gvSecClass>2</gvSecClass>"));
            Assert.IsTrue(result.Contains("<gvGid>AT:B:0:LxXnvpcYZesiqVXsZG0bB==</gvGid>"));
            Assert.IsTrue(result.Contains("<gvOuId>AT:GGA-60420:0815</gvOuId>"));
            Assert.IsTrue(result.Contains("<mail>[email protected]</mail>"));
            Assert.IsTrue(result.Contains("<tel>+43 3155 5153</tel>"));
            Assert.IsTrue(result.Contains("</userPrincipal></authenticate>"));
            Assert.IsTrue(
                result.Contains(@"<role value=""Beispielrolle""><param><key>GKZ</key><value>60420</value></param></role>"));
        }