public async Task When_Generating_Signed_Jws_Then_Operation_Is_Called()
        {
            // ARRANGE
            InitializeFakeObjects();
            const string url = "http://google.be/";
            const string kid = "kid";
            var          createJwsParameter = new CreateJwsParameter
            {
                Payload = new JwsPayload(),
                Alg     = JwsAlg.RS256,
                Kid     = kid,
                Url     = url
            };
            var jsonWebKey = new JsonWebKey();

            createJwsParameter.Payload.Add("sub", "sub");
            _jsonWebKeyHelperStub.Setup(j => j.GetJsonWebKey(It.IsAny <string>(), It.IsAny <Uri>()))
            .Returns(Task.FromResult <JsonWebKey>(jsonWebKey));

            // ACT
            await _createJwsAction.Execute(createJwsParameter);

            // ASSERT
            _jwsGeneratorStub.Verify(j => j.Generate(createJwsParameter.Payload, JwsAlg.RS256, jsonWebKey));
        }
        public async Task When_There_Is_No_JsonWebKey_Then_Exception_Is_Thrown()
        {
            // ARRANGE
            InitializeFakeObjects();
            const string url = "http://google.be/";
            const string kid = "kid";
            var          createJwsParameter = new CreateJwsParameter
            {
                Payload = new JwsPayload(),
                Alg     = JwsAlg.RS256,
                Kid     = kid,
                Url     = url
            };

            createJwsParameter.Payload.Add("sub", "sub");
            _jsonWebKeyHelperStub.Setup(j => j.GetJsonWebKey(It.IsAny <string>(), It.IsAny <Uri>()))
            .Returns(Task.FromResult <JsonWebKey>(null));

            // ACT & ASSERTS
            var exception = await Assert.ThrowsAsync <IdentityServerManagerException>(async() => await _createJwsAction.Execute(createJwsParameter)).ConfigureAwait(false);

            Assert.NotNull(exception);
            Assert.True(exception.Code == ErrorCodes.InvalidRequestCode);
            Assert.True(exception.Message == string.Format(ErrorDescriptions.TheJsonWebKeyCannotBeFound, kid, url));
        }
Example #3
0
        public Task <string> CreateJws(CreateJwsParameter createJwsParameter)
        {
            if (createJwsParameter == null)
            {
                throw new ArgumentNullException(nameof(createJwsParameter));
            }

            return(_createJwsAction.Execute(createJwsParameter));
        }
        public void When_Passing_Null_Parameter_Then_Exceptions_Are_Thrown()
        {
            // ARRANGE
            InitializeFakeObjects();
            var createJwsParameter      = new CreateJwsParameter();
            var emptyCreateJwsParameter = new CreateJwsParameter
            {
                Payload = new JwsPayload()
            };

            // ACT & ASSERTS
            Assert.ThrowsAsync <ArgumentNullException>(() => _createJwsAction.Execute(null)).ConfigureAwait(false);
            Assert.ThrowsAsync <ArgumentNullException>(() => _createJwsAction.Execute(createJwsParameter)).ConfigureAwait(false);
            Assert.ThrowsAsync <ArgumentNullException>(() => _createJwsAction.Execute(emptyCreateJwsParameter)).ConfigureAwait(false);
        }
        public void When_Executing_CreateJws_Then_Operation_Is_Called()
        {
            // ARRANGE
            InitializeFakeObjects();
            var createJwsParameter = new CreateJwsParameter
            {
                Payload = new JwsPayload()
            };

            // ACT
            _jwsActions.CreateJws(createJwsParameter).Wait();

            // ASSERT
            _createJwsActionStub.Verify(g => g.Execute(createJwsParameter));
        }
Example #6
0
        public async Task <string> Execute(CreateJwsParameter createJwsParameter)
        {
            if (createJwsParameter == null)
            {
                throw new ArgumentNullException(nameof(createJwsParameter));
            }

            if (createJwsParameter.Payload == null ||
                !createJwsParameter.Payload.Any())
            {
                throw new ArgumentNullException(nameof(createJwsParameter.Payload));
            }

            if (createJwsParameter.Alg != JwsAlg.none &&
                (string.IsNullOrWhiteSpace(createJwsParameter.Kid) || string.IsNullOrWhiteSpace(createJwsParameter.Url)))
            {
                throw new IdentityServerManagerException(ErrorCodes.InvalidRequestCode,
                                                         ErrorDescriptions.TheJwsCannotBeGeneratedBecauseMissingParameters);
            }

            Uri uri = null;

            if (createJwsParameter.Alg != JwsAlg.none && !Uri.TryCreate(createJwsParameter.Url, UriKind.Absolute, out uri))
            {
                throw new IdentityServerManagerException(ErrorCodes.InvalidRequestCode,
                                                         ErrorDescriptions.TheUrlIsNotWellFormed);
            }

            JsonWebKey jsonWebKey = null;

            if (createJwsParameter.Alg != JwsAlg.none)
            {
                jsonWebKey = await _jsonWebKeyHelper.GetJsonWebKey(createJwsParameter.Kid, uri).ConfigureAwait(false);

                if (jsonWebKey == null)
                {
                    throw new IdentityServerManagerException(
                              ErrorCodes.InvalidRequestCode,
                              string.Format(ErrorDescriptions.TheJsonWebKeyCannotBeFound, createJwsParameter.Kid, uri.AbsoluteUri));
                }
            }

            return(_jwsGenerator.Generate(createJwsParameter.Payload,
                                          createJwsParameter.Alg,
                                          jsonWebKey));
        }
        public async Task When_Generating_Unsigned_Jws_Then_Operation_Is_Called()
        {
            // ARRANGE
            InitializeFakeObjects();
            var createJwsParameter = new CreateJwsParameter
            {
                Alg     = JwsAlg.none,
                Payload = new JwsPayload()
            };

            createJwsParameter.Payload.Add("sub", "sub");

            // ACT
            await _createJwsAction.Execute(createJwsParameter);

            // ASSERT
            _jwsGeneratorStub.Verify(j => j.Generate(createJwsParameter.Payload, JwsAlg.none, null));
        }
        public async Task When_Passing_RS256Alg_But_No_Uri_And_Kid_Then_Exception_Is_Thrown()
        {
            // ARRANGE
            InitializeFakeObjects();
            var createJwsParameter = new CreateJwsParameter
            {
                Payload = new JwsPayload(),
                Alg     = JwsAlg.RS256
            };

            createJwsParameter.Payload.Add("sub", "sub");

            // ACT & ASSERTS
            var exception = await Assert.ThrowsAsync <IdentityServerManagerException>(async() => await _createJwsAction.Execute(createJwsParameter)).ConfigureAwait(false);

            Assert.NotNull(exception);
            Assert.True(exception.Code == ErrorCodes.InvalidRequestCode);
            Assert.True(exception.Message == ErrorDescriptions.TheJwsCannotBeGeneratedBecauseMissingParameters);
        }
        public async Task When_Url_Is_Not_Well_Formed_Then_Exception_Is_Thrown()
        {
            // ARRANGE
            InitializeFakeObjects();
            const string url = "invalid_url";
            var          createJwsParameter = new CreateJwsParameter
            {
                Payload = new JwsPayload(),
                Alg     = JwsAlg.RS256,
                Kid     = "kid",
                Url     = url
            };

            createJwsParameter.Payload.Add("sub", "sub");

            // ACT & ASSERTS
            var exception = await Assert.ThrowsAsync <IdentityServerManagerException>(async() => await _createJwsAction.Execute(createJwsParameter)).ConfigureAwait(false);

            Assert.NotNull(exception);
            Assert.True(exception.Code == ErrorCodes.InvalidRequestCode);
            Assert.True(exception.Message == ErrorDescriptions.TheUrlIsNotWellFormed);
        }