/// <summary>
        /// Returns an action resultKind to the controller's action.
        /// 1). Redirect to the consent screen if the user is authenticated AND the request doesn't contain a login prompt.
        /// 2). Do nothing
        /// </summary>
        /// <param name="authorizationParameter">The parameter</param>
        /// <param name="resourceOwnerPrincipal">Resource owner principal</param>
        /// <param name="code">Encrypted parameter</param>
        /// <param name="issuerName"></param>
        /// <param name="cancellationToken">The <see cref="CancellationToken"/> for the async operation.</param>
        /// <returns>Action resultKind to the controller's action</returns>
        public async Task <EndpointResult> Execute(
            AuthorizationParameter authorizationParameter,
            ClaimsPrincipal?resourceOwnerPrincipal,
            string?code,
            string?issuerName,
            CancellationToken cancellationToken)
        {
            var resourceOwnerIsAuthenticated = resourceOwnerPrincipal.IsAuthenticated();
            var promptParameters             = authorizationParameter.Prompt.ParsePrompts();

            // 1).
            if (resourceOwnerIsAuthenticated &&
                !promptParameters.Contains(PromptParameters.Login))
            {
                var subject = resourceOwnerPrincipal.GetSubject() !;
                var claims  = resourceOwnerPrincipal !.Claims.ToArray();
                return(await _authenticateHelper.ProcessRedirection(
                           authorizationParameter,
                           code,
                           subject,
                           claims,
                           issuerName,
                           cancellationToken)
                       .ConfigureAwait(false));
            }

            // 2).
            return(EndpointResult.CreateAnEmptyActionResultWithNoEffect());
        }
Esempio n. 2
0
        public async Task When_No_Resource_Owner_Is_Passed_Then_Redirect_To_Index_Page()
        {
            var authorizationParameter = new AuthorizationParameter();

            var result = await _authenticateResourceOwnerOpenIdAction.Execute(authorizationParameter, null, null, null, CancellationToken.None)
                         .ConfigureAwait(false);

            Assert.Equal(
                JsonConvert.SerializeObject(EndpointResult.CreateAnEmptyActionResultWithNoEffect()),
                JsonConvert.SerializeObject(result));
        }
Esempio n. 3
0
        public async Task When_Prompt_Parameter_Contains_Login_Value_Then_Redirect_To_Index_Page()
        {
            var authorizationParameter = new AuthorizationParameter
            {
                Prompt   = "login",
                ClientId = "client",
                Scope    = "scope"
            };
            var claimsIdentity  = new ClaimsIdentity("authServer");
            var claimsPrincipal = new ClaimsPrincipal(claimsIdentity);

            var result = await _authenticateResourceOwnerOpenIdAction.Execute(
                authorizationParameter,
                claimsPrincipal,
                null,
                null,
                CancellationToken.None)
                         .ConfigureAwait(false);

            Assert.Equal(
                JsonConvert.SerializeObject(EndpointResult.CreateAnEmptyActionResultWithNoEffect()),
                JsonConvert.SerializeObject(result));
        }