Beispiel #1
0
        /// <summary>
        /// Executes the result.
        /// </summary>
        /// <param name="context">The HTTP context.</param>
        /// <returns></returns>
        public async Task ExecuteAsync(HttpContext context)
        {
            Init(context);

            var returnUrl = context.GetIdentityServerBasePath().EnsureTrailingSlash() + Constants.ProtocolRoutePaths.AuthorizeCallback;

            if (_authorizationParametersMessageStore != null)
            {
                var msg = new Message <IDictionary <string, string[]> >(_request.ToOptimizedFullDictionary());
                var id  = await _authorizationParametersMessageStore.WriteAsync(msg);

                returnUrl = returnUrl.AddQueryString(Constants.AuthorizationParamsStore.MessageStoreIdParameterName, id);
            }
            else
            {
                returnUrl = returnUrl.AddQueryString(_request.ToOptimizedQueryString());
            }

            var loginUrl = _options.UserInteraction.LoginUrl;

            if (!loginUrl.IsLocalUrl())
            {
                // this converts the relative redirect path to an absolute one if we're
                // redirecting to a different server
                returnUrl = context.GetIdentityServerHost().EnsureTrailingSlash() + returnUrl.RemoveLeadingSlash();
            }

            var url = loginUrl.AddQueryString(_options.UserInteraction.LoginReturnUrlParameter, returnUrl);

            context.Response.RedirectToAbsoluteUrl(url);
        }