Example #1
0
        public async Task FailsToCreateAuthorizationRequest_Prompt_IncludesUnknownValue()
        {
            // Arrange
            var parameters =
                new Dictionary <string, string[]>
            {
                [OpenIdConnectParameterNames.ClientId]     = new[] { "a" },
                [OpenIdConnectParameterNames.RedirectUri]  = new[] { "http://www.example.com/callback" },
                [OpenIdConnectParameterNames.ResponseType] = new[] { "code" },
                [OpenIdConnectParameterNames.ResponseMode] = new[] { "form_post" },
                [OpenIdConnectParameterNames.Nonce]        = new[] { "asdf" },
                [OpenIdConnectParameterNames.Scope]        = new[] { "  openid   profile   " },
                [OpenIdConnectParameterNames.State]        = new[] { "state" },
                [OpenIdConnectParameterNames.Prompt]       = new[] { "login consent select_account unknown" }
            };

            var expectedError = new AuthorizationRequestError(ProtocolErrorProvider.InvalidPromptValue("unknown"), null, null);

            expectedError.Message.State = "state";

            var factory = CreateAuthorizationRequestFactory();

            // Act
            var result = await factory.CreateAuthorizationRequestAsync(parameters);

            // Assert
            Assert.False(result.IsValid);
            Assert.Equal(expectedError, result.Error, IdentityServiceErrorComparer.Instance);
            Assert.Equal("http://www.example.com/callback", result.Error.RedirectUri);
            Assert.Equal(OpenIdConnectResponseMode.FormPost, result.Error.ResponseMode);
        }
        private OpenIdConnectMessage ValidatePrompt(string[] parsedPrompt)
        {
            for (int i = 0; i < parsedPrompt.Length; i++)
            {
                var prompt = parsedPrompt[i];
                if (string.Equals(prompt, PromptValues.None, StringComparison.Ordinal))
                {
                    if (parsedPrompt.Length > 1)
                    {
                        return(_errorProvider.PromptNoneMustBeTheOnlyValue(string.Join(" ", parsedPrompt)));
                    }

                    continue;
                }

                if (string.Equals(prompt, PromptValues.Login, StringComparison.Ordinal) ||
                    string.Equals(prompt, PromptValues.Consent, StringComparison.Ordinal) ||
                    string.Equals(prompt, PromptValues.SelectAccount, StringComparison.Ordinal))
                {
                    continue;
                }

                return(_errorProvider.InvalidPromptValue(prompt));
            }

            return(null);
        }