public void TestThatIssueRetursIfAppliesToInRequestSecurityTokenContainsTrustedRelyingParty(string trustedUri, string identityCertificate)
        {
            var fixture = new Fixture();

            var identifyMock = MockRepository.GenerateMock <IIdentity>();

            identifyMock.Expect(m => m.Name)
            .Return(fixture.Create <string>())
            .Repeat.Any();
            identifyMock.Expect(m => m.IsAuthenticated)
            .Return(true)
            .Repeat.Any();

            var claimPrincipalMock = MockRepository.GenerateMock <IClaimsPrincipal>();

            claimPrincipalMock.Stub(m => m.Identity)
            .Return(identifyMock)
            .Repeat.Any();
            claimPrincipalMock.Stub(m => m.Identities)
            .Return(null)
            .Repeat.Any();

            var basicSecurityTokenService = new BasicSecurityTokenService(new BasicSecurityTokenServiceConfiguration());

            Assert.That(basicSecurityTokenService, Is.Not.Null);

            var request = new RequestSecurityToken
            {
                AppliesTo = new EndpointAddress(new Uri(trustedUri), new X509CertificateEndpointIdentity(TestHelper.GetCertificate(identityCertificate)), new AddressHeaderCollection())
            };

            var response = basicSecurityTokenService.Issue(claimPrincipalMock, request);

            Assert.That(response, Is.Not.Null);
        }
        public void TestThatIssueThrowsInvalidRequestExceptionIfAppliesToInRequestSecurityTokenContainsNoTrustedRelyingParty(string untrustedUri, string identityCertificate)
        {
            var identifyMock = MockRepository.GenerateMock <IIdentity>();

            identifyMock.Expect(m => m.IsAuthenticated)
            .Return(true)
            .Repeat.Any();

            var claimPrincipalMock = MockRepository.GenerateMock <IClaimsPrincipal>();

            claimPrincipalMock.Stub(m => m.Identity)
            .Return(identifyMock)
            .Repeat.Any();

            var basicSecurityTokenService = new BasicSecurityTokenService(new BasicSecurityTokenServiceConfiguration());

            Assert.That(basicSecurityTokenService, Is.Not.Null);

            var request = new RequestSecurityToken
            {
                AppliesTo = new EndpointAddress(new Uri(untrustedUri), new X509CertificateEndpointIdentity(TestHelper.GetCertificate(identityCertificate)), new AddressHeaderCollection())
            };

            var exception = Assert.Throws <InvalidRequestException>(() => basicSecurityTokenService.Issue(claimPrincipalMock, request));

            Assert.That(exception, Is.Not.Null);
            Assert.That(exception.Message, Is.Not.Null);
            Assert.That(exception.Message, Is.Not.Empty);
            Assert.That(exception.Message, Is.EqualTo(Resource.GetExceptionMessage(ExceptionMessage.InvalidRelyingPartyAddress, new Uri(untrustedUri))));
            Assert.That(exception.InnerException, Is.Null);
        }
        public void TestThatIssueThrowsInvalidRequestExceptionIfAppliesToInRequestSecurityTokenIsNull()
        {
            var identifyMock = MockRepository.GenerateMock <IIdentity>();

            identifyMock.Expect(m => m.IsAuthenticated)
            .Return(true)
            .Repeat.Any();

            var claimPrincipalMock = MockRepository.GenerateMock <IClaimsPrincipal>();

            claimPrincipalMock.Stub(m => m.Identity)
            .Return(identifyMock)
            .Repeat.Any();

            var basicSecurityTokenService = new BasicSecurityTokenService(new BasicSecurityTokenServiceConfiguration());

            Assert.That(basicSecurityTokenService, Is.Not.Null);

            var request = new RequestSecurityToken
            {
                AppliesTo = null
            };

            var exception = Assert.Throws <InvalidRequestException>(() => basicSecurityTokenService.Issue(claimPrincipalMock, request));

            Assert.That(exception, Is.Not.Null);
            Assert.That(exception.Message, Is.Not.Null);
            Assert.That(exception.Message, Is.Not.Empty);
            Assert.That(exception.Message, Is.EqualTo(Resource.GetExceptionMessage(ExceptionMessage.AppliesToMustBeSuppliedInRequestSecurityToken)));
            Assert.That(exception.InnerException, Is.Null);
        }
        public void TestThatIssueThrowsInvalidRequestExceptionIfIsAuthenticatedFromIdentityOnClaimsPrincipalIsFalse()
        {
            var identifyMock = MockRepository.GenerateMock <IIdentity>();

            identifyMock.Expect(m => m.IsAuthenticated)
            .Return(false)
            .Repeat.Any();

            var claimPrincipalMock = MockRepository.GenerateMock <IClaimsPrincipal>();

            claimPrincipalMock.Stub(m => m.Identity)
            .Return(identifyMock)
            .Repeat.Any();

            var basicSecurityTokenService = new BasicSecurityTokenService(new BasicSecurityTokenServiceConfiguration());

            Assert.That(basicSecurityTokenService, Is.Not.Null);

            var exception = Assert.Throws <InvalidRequestException>(() => basicSecurityTokenService.Issue(claimPrincipalMock, new RequestSecurityToken()));

            Assert.That(exception, Is.Not.Null);
            Assert.That(exception.Message, Is.Not.Null);
            Assert.That(exception.Message, Is.Not.Empty);
            Assert.That(exception.Message, Is.EqualTo((new AuthenticationException()).Message));
            Assert.That(exception.InnerException, Is.Not.Null);
            Assert.That(exception.InnerException, Is.TypeOf <AuthenticationException>());
        }
        public void TestThatIssueAppendsClaimsToCallingClaimsPrincipal(string trustedUri, string identityCertificate, string mailAddress, int expectedAppendedClaims)
        {
            var fixture = new Fixture();

            var identifyMock = MockRepository.GenerateMock <IIdentity>();

            identifyMock.Expect(m => m.Name)
            .Return(fixture.Create <string>())
            .Repeat.Any();
            identifyMock.Expect(m => m.IsAuthenticated)
            .Return(true)
            .Repeat.Any();

            var claimsIdentityMock = MockRepository.GenerateMock <IClaimsIdentity>();
            var claimsCollection   = new ClaimCollection(claimsIdentityMock)
            {
                new Claim(ClaimTypes.Email, mailAddress)
            };

            claimsIdentityMock.Stub(m => m.Claims)
            .Return(claimsCollection)
            .Repeat.Any();

            var claimsIdentityCollection = new ClaimsIdentityCollection(new List <IClaimsIdentity> {
                claimsIdentityMock
            });
            var claimPrincipalMock = MockRepository.GenerateMock <IClaimsPrincipal>();

            claimPrincipalMock.Stub(m => m.Identity)
            .Return(identifyMock)
            .Repeat.Any();
            claimPrincipalMock.Stub(m => m.Identities)
            .Return(claimsIdentityCollection)
            .Repeat.Any();

            var basicSecurityTokenService = new BasicSecurityTokenService(new BasicSecurityTokenServiceConfiguration());

            Assert.That(basicSecurityTokenService, Is.Not.Null);

            var request = new RequestSecurityToken
            {
                AppliesTo = new EndpointAddress(new Uri(trustedUri), new X509CertificateEndpointIdentity(TestHelper.GetCertificate(identityCertificate)), new AddressHeaderCollection())
            };

            var response = basicSecurityTokenService.Issue(claimPrincipalMock, request);

            Assert.That(response, Is.Not.Null);

            Assert.That(claimsCollection.Count, Is.EqualTo(1 + expectedAppendedClaims));
        }
        public void TestThatIssueThrowsArgumentNullExceptionIfRequestSecurityTokenIsNull()
        {
            var fixture = new Fixture();

            fixture.Customize <IClaimsPrincipal>(e => e.FromFactory(() => MockRepository.GenerateMock <IClaimsPrincipal>()));

            var basicSecurityTokenService = new BasicSecurityTokenService(new BasicSecurityTokenServiceConfiguration());

            Assert.That(basicSecurityTokenService, Is.Not.Null);

            var exception = Assert.Throws <ArgumentNullException>(() => basicSecurityTokenService.Issue(fixture.Create <IClaimsPrincipal>(), null));

            Assert.That(exception, Is.Not.Null);
            Assert.That(exception.ParamName, Is.Not.Null);
            Assert.That(exception.ParamName, Is.Not.Empty);
            Assert.That(exception.ParamName, Is.EqualTo("request"));
            Assert.That(exception.InnerException, Is.Null);
        }
        public void TestThatIssueThrowsInvalidRequestExceptionIfClaimsPrincipalIsNull()
        {
            var basicSecurityTokenService = new BasicSecurityTokenService(new BasicSecurityTokenServiceConfiguration());

            Assert.That(basicSecurityTokenService, Is.Not.Null);

            var exception = Assert.Throws <InvalidRequestException>(() => basicSecurityTokenService.Issue(null, new RequestSecurityToken()));

            Assert.That(exception, Is.Not.Null);
            Assert.That(exception.Message, Is.Not.Null);
            Assert.That(exception.Message, Is.Not.Empty);
            // ReSharper disable NotResolvedInText
            Assert.That(exception.Message, Is.EqualTo((new ArgumentNullException("principal")).Message));
            // ReSharper restore NotResolvedInText
            Assert.That(exception.InnerException, Is.Not.Null);
            Assert.That(exception.InnerException, Is.TypeOf <ArgumentNullException>());
            Assert.That(((ArgumentNullException)exception.InnerException).ParamName, Is.Not.Null);
            Assert.That(((ArgumentNullException)exception.InnerException).ParamName, Is.Not.Empty);
            Assert.That(((ArgumentNullException)exception.InnerException).ParamName, Is.EqualTo("principal"));
            Assert.That(exception.InnerException.InnerException, Is.Null);
        }
        public void TestThatConstructorCanInitializeBasicSecurityTokenService()
        {
            var basicSecurityTokenService = new BasicSecurityTokenService(new BasicSecurityTokenServiceConfiguration());

            Assert.That(basicSecurityTokenService, Is.Not.Null);
        }