public async Task <ActionResult> PostRevoke()
        {
            if (Request.Form == null)
            {
                throw new ArgumentNullException(nameof(Request.Form));
            }

            var serializer        = new ParamSerializer();
            var revocationRequest = serializer.Deserialize <RevocationRequest>(Request.Form);
            // 1. Fetch the authorization header
            StringValues authorizationHeader;
            AuthenticationHeaderValue authenticationHeaderValue = null;

            if (Request.Headers.TryGetValue("Authorization", out authorizationHeader))
            {
                var authorizationHeaderValue         = authorizationHeader.First();
                var splittedAuthorizationHeaderValue = authorizationHeaderValue.Split(' ');
                if (splittedAuthorizationHeaderValue.Count() == 2)
                {
                    authenticationHeaderValue = new AuthenticationHeaderValue(
                        splittedAuthorizationHeaderValue[0],
                        splittedAuthorizationHeaderValue[1]);
                }
            }

            // 2. Revoke the token
            var issuerName = Request.GetAbsoluteUriWithVirtualPath();
            await _tokenActions.RevokeToken(revocationRequest.ToParameter(), authenticationHeaderValue, GetCertificate(), issuerName);

            return(new OkResult());
        }
Esempio n. 2
0
        public async Task <Introspection> Post()
        {
            if (Request.Form == null)
            {
                throw new ArgumentNullException(nameof(Request.Form));
            }

            var          serializer           = new ParamSerializer();
            var          introspectionRequest = serializer.Deserialize <IntrospectionRequest>(Request.Form);
            StringValues authorizationHeader;
            AuthenticationHeaderValue authenticationHeaderValue = null;

            if (Request.Headers.TryGetValue("Authorization", out authorizationHeader))
            {
                var authorizationHeaderValue         = authorizationHeader.First();
                var splittedAuthorizationHeaderValue = authorizationHeaderValue.Split(' ');
                if (splittedAuthorizationHeaderValue.Count() == 2)
                {
                    authenticationHeaderValue = new AuthenticationHeaderValue(
                        splittedAuthorizationHeaderValue[0],
                        splittedAuthorizationHeaderValue[1]);
                }
            }

            var result = await _introspectionActions.PostIntrospection(introspectionRequest.ToParameter(), authenticationHeaderValue);

            return(result.ToDto());
        }
        public void DeserializeCollection()
        {
            var serializer = new ParamSerializer();
            var collection = new NameValueCollection
                                    {
                                            { "Prop1", "test" },
                                            { "Prop2", "10" },
                                            { "Prop3", "32.45" },
                                            { "Prop4", "true" },
                                            { "Prop5", "2013-10-03" },
                                            { "Prop6", "test1" },
                                            { "Prop6", "test2" },
                                            { "Prop6", "test3" },
                                            { "Prop6", "test4" },
                                    };
            var startObj = new FakeObject
                             {
                                 Prop1 = "test",
                                 Prop2 = 10,
                                 Prop3 = 32.45,
                                 Prop4 = true,
                                 Prop5 = new DateTime(2013, 10, 3),
                                 Prop6 = new[] { "test1", "test2", "test3", "test4" },
                             };

            var endObj = serializer.Deserialize<FakeObject>(collection);

            Assert.AreEqual(startObj, endObj);
        }
Esempio n. 4
0
        public void DeserializeCollection()
        {
            var serializer = new ParamSerializer();
            var collection = new NameValueCollection
            {
                { "Prop1", "test" },
                { "Prop2", "10" },
                { "Prop3", "32.45" },
                { "Prop4", "true" },
                { "Prop5", "2013-10-03" },
                { "Prop6", "test1" },
                { "Prop6", "test2" },
                { "Prop6", "test3" },
                { "Prop6", "test4" },
            };
            var startObj = new FakeObject
            {
                Prop1 = "test",
                Prop2 = 10,
                Prop3 = 32.45,
                Prop4 = true,
                Prop5 = new DateTime(2013, 10, 3),
                Prop6 = new[] { "test1", "test2", "test3", "test4" },
            };

            var endObj = serializer.Deserialize <FakeObject>(collection);

            Assert.AreEqual(startObj, endObj);
        }
        public async Task <Microsoft.AspNetCore.Mvc.ActionResult> Get()
        {
            var query = Request.Query;

            if (query == null)
            {
                throw new IdentityServerException(
                          ErrorCodes.InvalidRequestCode,
                          ErrorDescriptions.RequestIsNotValid);
            }

            var serializer           = new ParamSerializer();
            var authorizationRequest = serializer.Deserialize <AuthorizationRequest>(query);

            authorizationRequest = await ResolveAuthorizationRequest(authorizationRequest);

            var authenticatedUser = await this.GetAuthenticatedUser(_authenticateOptions.CookieName);

            var parameter    = authorizationRequest.ToParameter();
            var actionResult = await _authorizationActions.GetAuthorization(parameter, authenticatedUser);

            if (actionResult.Type == TypeActionResult.RedirectToCallBackUrl)
            {
                var redirectUrl = new Uri(authorizationRequest.RedirectUri);
                return(this.CreateRedirectHttpTokenResponse(redirectUrl,
                                                            _actionResultParser.GetRedirectionParameters(actionResult),
                                                            actionResult.RedirectInstruction.ResponseMode));
            }

            if (actionResult.Type == TypeActionResult.RedirectToAction)
            {
                if (actionResult.RedirectInstruction.Action == IdentityServerEndPoints.AuthenticateIndex ||
                    actionResult.RedirectInstruction.Action == IdentityServerEndPoints.ConsentIndex)
                {
                    // Force the resource owner to be reauthenticated
                    if (actionResult.RedirectInstruction.Action == IdentityServerEndPoints.AuthenticateIndex)
                    {
                        authorizationRequest.Prompt = Enum.GetName(typeof(PromptParameter), PromptParameter.login);
                    }

                    // Set the process id into the request.
                    if (!string.IsNullOrWhiteSpace(actionResult.ProcessId))
                    {
                        authorizationRequest.ProcessId = actionResult.ProcessId;
                    }

                    // Add the encoded request into the query string
                    var encryptedRequest = _dataProtector.Protect(authorizationRequest);
                    actionResult.RedirectInstruction.AddParameter(Core.Constants.StandardAuthorizationResponseNames.AuthorizationCodeName,
                                                                  encryptedRequest);
                }

                var url            = GetRedirectionUrl(this.Request, actionResult.RedirectInstruction.Action);
                var uri            = new Uri(url);
                var redirectionUrl = uri.AddParametersInQuery(_actionResultParser.GetRedirectionParameters(actionResult));
                return(new RedirectResult(redirectionUrl.AbsoluteUri));
            }

            return(null);
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            var serializer = new ParamSerializer();

            var foo = serializer.Deserialize <Foo>(Request.Form);

            this.ResponseOutput.Text = JsonConvert.SerializeObject(foo);
        }
Esempio n. 7
0
        protected void Page_Load(object sender, EventArgs e)
        {
            var serializer = new ParamSerializer();

            var foo = serializer.Deserialize<Foo>(Request.Form);

            this.ResponseOutput.Text = JsonConvert.SerializeObject(foo);
        }
Esempio n. 8
0
        public async Task <TokenResponse> PostToken()
        {
            var certificate = GetCertificate();

            if (Request.Form == null)
            {
                throw new ArgumentNullException(nameof(Request.Form));
            }

            var          serializer   = new ParamSerializer();
            var          tokenRequest = serializer.Deserialize <TokenRequest>(Request.Form);
            GrantedToken result       = null;
            StringValues authorizationHeader;
            AuthenticationHeaderValue authenticationHeaderValue = null;

            if (Request.Headers.TryGetValue("Authorization", out authorizationHeader))
            {
                var authorizationHeaderValue         = authorizationHeader.First();
                var splittedAuthorizationHeaderValue = authorizationHeaderValue.Split(' ');
                if (splittedAuthorizationHeaderValue.Count() == 2)
                {
                    authenticationHeaderValue = new AuthenticationHeaderValue(
                        splittedAuthorizationHeaderValue[0],
                        splittedAuthorizationHeaderValue[1]);
                }
            }

            switch (tokenRequest.GrantType)
            {
            case GrantTypes.password:
                var resourceOwnerParameter = tokenRequest.ToResourceOwnerGrantTypeParameter();
                result = await _tokenActions.GetTokenByResourceOwnerCredentialsGrantType(resourceOwnerParameter, authenticationHeaderValue, certificate);

                break;

            case GrantTypes.authorization_code:
                var authCodeParameter = tokenRequest.ToAuthorizationCodeGrantTypeParameter();
                result = await _tokenActions.GetTokenByAuthorizationCodeGrantType(
                    authCodeParameter,
                    authenticationHeaderValue);

                break;

            case GrantTypes.refresh_token:
                var refreshTokenParameter = tokenRequest.ToRefreshTokenGrantTypeParameter();
                result = await _tokenActions.GetTokenByRefreshTokenGrantType(refreshTokenParameter);

                break;

            case GrantTypes.client_credentials:
                var clientCredentialsParameter = tokenRequest.ToClientCredentialsGrantTypeParameter();
                result = await _tokenActions.GetTokenByClientCredentialsGrantType(clientCredentialsParameter, authenticationHeaderValue);

                break;
            }

            return(result.ToDto());
        }
Esempio n. 9
0
        public void SerializeDeserialize_Simple()
        {
            var serializer  = new ParamSerializer();
            var startObj    = new { a = "1", b = "2" };
            var endObj      = serializer.Deserialize(serializer.Serialize(startObj));
            var startObjStr = JsonConvert.SerializeObject(startObj);
            var endObjStr   = JsonConvert.SerializeObject(endObj);

            Assert.AreEqual(startObjStr, endObjStr);
        }
Esempio n. 10
0
        public void SerializeDeserialize_Complex()
        {
            var serializer = new ParamSerializer();
            var startObj   =
                new { a = new object[] { "1", "2", new { d = "8", e = "9" } }, b = "2", c = new { f = "10", g = "11" } };
            var endObj      = serializer.Deserialize(serializer.Serialize(startObj));
            var startObjStr = JsonConvert.SerializeObject(startObj);
            var endObjStr   = JsonConvert.SerializeObject(endObj);

            Assert.AreEqual(startObjStr, endObjStr);
        }
        public async Task RevokeSessionCallback()
        {
            var authenticatedUser = await _authenticationService.GetAuthenticatedUser(this, Constants.CookieNames.CookieName);

            if (authenticatedUser == null || !authenticatedUser.Identity.IsAuthenticated)
            {
                await this.DisplayInternalHtml("SimpleIdentityServer.Host.Views.UserNotConnected.html");

                return;
            }

            var query      = Request.Query;
            var serializer = new ParamSerializer();
            RevokeSessionRequest request = null;

            if (query != null)
            {
                request = serializer.Deserialize <RevokeSessionRequest>(query);
            }

            Response.Cookies.Delete(Core.Constants.SESSION_ID);
            await _authenticationService.SignOutAsync(HttpContext, Constants.CookieNames.CookieName, new Microsoft.AspNetCore.Authentication.AuthenticationProperties());

            if (request != null && !string.IsNullOrWhiteSpace(request.PostLogoutRedirectUri) && !string.IsNullOrWhiteSpace(request.IdTokenHint))
            {
                var jws = await _jwtParser.UnSignAsync(request.IdTokenHint);

                if (jws != null)
                {
                    var claim = jws.FirstOrDefault(c => c.Key == StandardClaimNames.Azp);
                    if (!claim.Equals(default(KeyValuePair <string, object>)) && claim.Value != null)
                    {
                        var client = await _clientRepository.GetClientByIdAsync(claim.Value.ToString());

                        if (client != null)
                        {
                            if (client.PostLogoutRedirectUris != null && client.PostLogoutRedirectUris.Contains(request.PostLogoutRedirectUri))
                            {
                                var redirectUrl = request.PostLogoutRedirectUri;
                                if (!string.IsNullOrWhiteSpace(request.State))
                                {
                                    redirectUrl = $"{redirectUrl}?state={request.State}";
                                }

                                Response.Redirect(redirectUrl);
                                return;
                            }
                        }
                    }
                }
            }

            await this.DisplayInternalHtml("SimpleIdentityServer.Host.Views.RevokeSessionCallback.html");
        }
Esempio n. 12
0
            void IXmlSerializable.ReadXml(XmlReader reader)
            {
                reader.MoveToContent();
                bool empty = reader.IsEmptyElement;

                Unk04 = int.Parse(reader.GetAttribute(nameof(Unk04)));
                reader.ReadStartElement();

                if (!empty)
                {
                    while (reader.IsStartElement(nameof(Param)))
                    {
                        Params.Add((Param)ParamSerializer.Deserialize(reader));
                    }
                    reader.ReadEndElement();
                }
            }
        public async Task <ActionResult> PostRevoke()
        {
            try
            {
                if (Request.Form == null)
                {
                    return(BuildError(ErrorCodes.InvalidRequestCode, "no parameter in body request", HttpStatusCode.BadRequest));
                }
            }
            catch (Exception)
            {
                return(BuildError(ErrorCodes.InvalidRequestCode, "no parameter in body request", HttpStatusCode.BadRequest));
            }

            var nameValueCollection = new NameValueCollection();

            foreach (var kvp in Request.Form)
            {
                nameValueCollection.Add(kvp.Key, kvp.Value);
            }

            var serializer        = new ParamSerializer();
            var revocationRequest = serializer.Deserialize <RevocationRequest>(nameValueCollection);
            // 1. Fetch the authorization header
            StringValues authorizationHeader;
            AuthenticationHeaderValue authenticationHeaderValue = null;

            if (Request.Headers.TryGetValue("Authorization", out authorizationHeader))
            {
                var authorizationHeaderValue         = authorizationHeader.First();
                var splittedAuthorizationHeaderValue = authorizationHeaderValue.Split(' ');
                if (splittedAuthorizationHeaderValue.Count() == 2)
                {
                    authenticationHeaderValue = new AuthenticationHeaderValue(
                        splittedAuthorizationHeaderValue[0],
                        splittedAuthorizationHeaderValue[1]);
                }
            }

            // 2. Revoke the token
            var issuerName = Request.GetAbsoluteUriWithVirtualPath();
            await _tokenActions.RevokeToken(revocationRequest.ToParameter(), authenticationHeaderValue, GetCertificate(), issuerName);

            return(new OkResult());
        }
        public async Task <IActionResult> Post()
        {
            try
            {
                if (Request.Form == null)
                {
                    return(BuildError(ErrorCodes.InvalidRequestCode, "no parameter in body request", HttpStatusCode.BadRequest));
                }
            }
            catch (Exception)
            {
                return(BuildError(ErrorCodes.InvalidRequestCode, "no parameter in body request", HttpStatusCode.BadRequest));
            }

            var nameValueCollection = new NameValueCollection();

            foreach (var kvp in Request.Form)
            {
                nameValueCollection.Add(kvp.Key, kvp.Value);
            }

            var          s                    = Thread.CurrentThread.ManagedThreadId;
            var          serializer           = new ParamSerializer();
            var          introspectionRequest = serializer.Deserialize <IntrospectionRequest>(nameValueCollection);
            StringValues authorizationHeader;
            AuthenticationHeaderValue authenticationHeaderValue = null;

            if (Request.Headers.TryGetValue("Authorization", out authorizationHeader))
            {
                var authorizationHeaderValue         = authorizationHeader.First();
                var splittedAuthorizationHeaderValue = authorizationHeaderValue.Split(' ');
                if (splittedAuthorizationHeaderValue.Count() == 2)
                {
                    authenticationHeaderValue = new AuthenticationHeaderValue(
                        splittedAuthorizationHeaderValue[0],
                        splittedAuthorizationHeaderValue[1]);
                }
            }

            var issuerName = Request.GetAbsoluteUriWithVirtualPath();
            var result     = await _introspectionActions.PostIntrospection(introspectionRequest.ToParameter(), authenticationHeaderValue, issuerName);

            return(new OkObjectResult(result.ToDto()));
        }
        public async Task <ActionResult> PostRevoke()
        {
            if (Request.Form == null)
            {
                throw new ArgumentNullException(nameof(Request.Form));
            }

            var nameValueCollection = new NameValueCollection();

            foreach (var kvp in Request.Form)
            {
                nameValueCollection.Add(kvp.Key, kvp.Value);
            }

            var serializer        = new ParamSerializer();
            var revocationRequest = serializer.Deserialize <RevocationRequest>(nameValueCollection);
            // 1. Fetch the authorization header
            StringValues authorizationHeader;
            AuthenticationHeaderValue authenticationHeaderValue = null;

            if (Request.Headers.TryGetValue("Authorization", out authorizationHeader))
            {
                var authorizationHeaderValue         = authorizationHeader.First();
                var splittedAuthorizationHeaderValue = authorizationHeaderValue.Split(' ');
                if (splittedAuthorizationHeaderValue.Count() == 2)
                {
                    authenticationHeaderValue = new AuthenticationHeaderValue(
                        splittedAuthorizationHeaderValue[0],
                        splittedAuthorizationHeaderValue[1]);
                }
            }

            // 2. Revoke the token
            await _tokenActions.RevokeToken(revocationRequest.ToParameter(), authenticationHeaderValue);

            return(new OkResult());
        }
Esempio n. 16
0
        public async Task <Introspection> Post()
        {
            if (Request.Form == null)
            {
                throw new ArgumentNullException(nameof(Request.Form));
            }

            var nameValueCollection = new NameValueCollection();

            foreach (var kvp in Request.Form)
            {
                nameValueCollection.Add(kvp.Key, kvp.Value);
            }

            var          s                    = Thread.CurrentThread.ManagedThreadId;
            var          serializer           = new ParamSerializer();
            var          introspectionRequest = serializer.Deserialize <IntrospectionRequest>(nameValueCollection);
            StringValues authorizationHeader;
            AuthenticationHeaderValue authenticationHeaderValue = null;

            if (Request.Headers.TryGetValue("Authorization", out authorizationHeader))
            {
                var authorizationHeaderValue         = authorizationHeader.First();
                var splittedAuthorizationHeaderValue = authorizationHeaderValue.Split(' ');
                if (splittedAuthorizationHeaderValue.Count() == 2)
                {
                    authenticationHeaderValue = new AuthenticationHeaderValue(
                        splittedAuthorizationHeaderValue[0],
                        splittedAuthorizationHeaderValue[1]);
                }
            }

            var result = await _introspectionActions.PostIntrospection(introspectionRequest.ToParameter(), authenticationHeaderValue);

            return(result.ToDto());
        }
        public void SerializeDeserialize_Simple()
        {
            var serializer = new ParamSerializer();
            var startObj = new { a = "1", b = "2" };
            var endObj = serializer.Deserialize(serializer.Serialize(startObj));
            var startObjStr = JsonConvert.SerializeObject(startObj);
            var endObjStr = JsonConvert.SerializeObject(endObj);

            Assert.AreEqual(startObjStr, endObjStr);
        }
        public void SerializeDeserialize_Complex()
        {
            var serializer = new ParamSerializer();
            var startObj =
                new { a = new object[] { "1", "2", new { d = "8", e = "9" } }, b = "2", c = new { f = "10", g = "11" } };
            var endObj = serializer.Deserialize(serializer.Serialize(startObj));
            var startObjStr = JsonConvert.SerializeObject(startObj);
            var endObjStr = JsonConvert.SerializeObject(endObj);

            Assert.AreEqual(startObjStr, endObjStr);
        }
Esempio n. 19
0
        public async Task <IActionResult> Get()
        {
            var query = Request.Query;

            if (query == null)
            {
                return(BuildError(ErrorCodes.InvalidRequestCode, "no parameter in body request", HttpStatusCode.BadRequest));
            }

            var originUrl            = this.GetOriginUrl();
            var sessionId            = GetSessionId();
            var serializer           = new ParamSerializer();
            var authorizationRequest = serializer.Deserialize <AuthorizationRequest>(query);

            authorizationRequest = await ResolveAuthorizationRequest(authorizationRequest).ConfigureAwait(false);

            authorizationRequest.OriginUrl = originUrl;
            authorizationRequest.SessionId = sessionId;
            var authenticatedUser = await _authenticationService.GetAuthenticatedUser(this, Constants.CookieNames.CookieName);

            var    parameter            = authorizationRequest.ToParameter();
            var    issuerName           = Request.GetAbsoluteUriWithVirtualPath();
            string authenticatedSubject = null;
            double?authInstant          = null;

            if (authenticatedUser != null)
            {
                authenticatedSubject = authenticatedUser.GetSubject();
                var authInstantClaim = authenticatedUser.Claims.FirstOrDefault(c => c.Type == Core.Common.StandardClaimNames.AuthenticationTime || c.Type == ClaimTypes.AuthenticationInstant);
                if (authInstantClaim != null)
                {
                    authInstant = double.Parse(authInstantClaim.Value);
                }
            }

            var actionResult = await _authorizationActions.GetAuthorization(parameter, issuerName, authenticatedSubject, authInstant);

            if (actionResult.Type == TypeActionResult.RedirectToCallBackUrl)
            {
                var redirectUrl = new Uri(authorizationRequest.RedirectUri);
                return(this.CreateRedirectHttpTokenResponse(redirectUrl,
                                                            _actionResultParser.GetRedirectionParameters(actionResult),
                                                            actionResult.RedirectInstruction.ResponseMode));
            }

            if (actionResult.Type == TypeActionResult.RedirectToAction)
            {
                if (actionResult.RedirectInstruction.Action == IdentityServerEndPoints.AuthenticateIndex ||
                    actionResult.RedirectInstruction.Action == IdentityServerEndPoints.ConsentIndex)
                {
                    // Force the resource owner to be reauthenticated
                    if (actionResult.RedirectInstruction.Action == IdentityServerEndPoints.AuthenticateIndex)
                    {
                        authorizationRequest.Prompt = Enum.GetName(typeof(PromptParameter), PromptParameter.login);
                    }

                    // Set the process id into the request.
                    if (!string.IsNullOrWhiteSpace(actionResult.ProcessId))
                    {
                        authorizationRequest.ProcessId = actionResult.ProcessId;
                    }

                    // Add the encoded request into the query string
                    if (actionResult.AmrLst != null)
                    {
                        authorizationRequest.AmrValues = string.Join(" ", actionResult.AmrLst);
                    }

                    var encryptedRequest = _dataProtector.Protect(authorizationRequest);
                    actionResult.RedirectInstruction.AddParameter(Core.Constants.StandardAuthorizationResponseNames.AuthorizationCodeName, encryptedRequest);
                }

                var url            = GetRedirectionUrl(Request, actionResult.AmrLst == null || !actionResult.AmrLst.Any() ? null : actionResult.AmrLst.First(), actionResult.RedirectInstruction.Action);
                var uri            = new Uri(url);
                var redirectionUrl = uri.AddParametersInQuery(_actionResultParser.GetRedirectionParameters(actionResult));
                return(new RedirectResult(redirectionUrl.AbsoluteUri));
            }

            return(null);
        }
 public static T Deserialize <T>(this ParamSerializer paramSerializer, IQueryCollection query)
 {
     return(paramSerializer.Deserialize <T>(ConvertNameValueCollection(query)));
 }
 public static T Deserialize <T>(this ParamSerializer paramSerializer, IFormCollection form)
 {
     return(paramSerializer.Deserialize <T>(ConvertNameValueCollection(form)));
 }
Esempio n. 22
0
        public async Task <IActionResult> PostToken()
        {
            var certificate = GetCertificate();

            try
            {
                if (Request.Form == null)
                {
                    return(BuildError(ErrorCodes.InvalidRequestCode, "no parameter in body request", HttpStatusCode.BadRequest));
                }
            }
            catch (Exception)
            {
                return(BuildError(ErrorCodes.InvalidRequestCode, "no parameter in body request", HttpStatusCode.BadRequest));
            }

            var          serializer   = new ParamSerializer();
            var          tokenRequest = serializer.Deserialize <TokenRequest>(Request.Form);
            GrantedToken result       = null;
            StringValues authorizationHeader;
            AuthenticationHeaderValue authenticationHeaderValue = null;

            if (Request.Headers.TryGetValue("Authorization", out authorizationHeader))
            {
                var authorizationHeaderValue         = authorizationHeader.First();
                var splittedAuthorizationHeaderValue = authorizationHeaderValue.Split(' ');
                if (splittedAuthorizationHeaderValue.Count() == 2)
                {
                    authenticationHeaderValue = new AuthenticationHeaderValue(
                        splittedAuthorizationHeaderValue[0],
                        splittedAuthorizationHeaderValue[1]);
                }
            }

            var issuerName = Request.GetAbsoluteUriWithVirtualPath();

            switch (tokenRequest.GrantType)
            {
            case GrantTypes.password:
                var resourceOwnerParameter = tokenRequest.ToResourceOwnerGrantTypeParameter();
                result = await _tokenActions.GetTokenByResourceOwnerCredentialsGrantType(resourceOwnerParameter, authenticationHeaderValue, certificate, issuerName);

                break;

            case GrantTypes.authorization_code:
                var authCodeParameter = tokenRequest.ToAuthorizationCodeGrantTypeParameter();
                result = await _tokenActions.GetTokenByAuthorizationCodeGrantType(authCodeParameter, authenticationHeaderValue, certificate, issuerName);

                break;

            case GrantTypes.refresh_token:
                var refreshTokenParameter = tokenRequest.ToRefreshTokenGrantTypeParameter();
                result = await _tokenActions.GetTokenByRefreshTokenGrantType(refreshTokenParameter, authenticationHeaderValue, certificate, issuerName);

                break;

            case GrantTypes.client_credentials:
                var clientCredentialsParameter = tokenRequest.ToClientCredentialsGrantTypeParameter();
                result = await _tokenActions.GetTokenByClientCredentialsGrantType(clientCredentialsParameter, authenticationHeaderValue, certificate, issuerName);

                break;

            case GrantTypes.uma_ticket:
                var tokenIdParameter           = tokenRequest.ToTokenIdGrantTypeParameter();
                var getTokenByTicketIdResponse = await _umaTokenActions.GetTokenByTicketId(tokenIdParameter, _authorizationServerOptions.OpenidWellKnownConfiguration, issuerName);

                if (!getTokenByTicketIdResponse.IsValid)
                {
                    var errorResponse = new ErrorResponse
                    {
                        Error = Errors.ErrorCodes.NotAuthorized
                    };

                    var errorDetails = new List <object>();
                    foreach (var policyResult in getTokenByTicketIdResponse.ResourceValidationResult.AuthorizationPoliciesResult)
                    {
                        var dic = new Dictionary <string, object>
                        {
                            { "status", policyResult.Type.ToString() },
                            { "details", policyResult.ErrorDetails }
                        };
                        if (policyResult.Policy != null)
                        {
                            dic.Add("policy_id", policyResult.Policy.Id);
                        }

                        errorDetails.Add(dic);
                    }

                    errorResponse.ErrorDetails = errorDetails;
                    return(new JsonResult(errorResponse)
                    {
                        StatusCode = (int)HttpStatusCode.InternalServerError
                    });
                }

                result = getTokenByTicketIdResponse.GrantedToken;
                break;
            }

            return(new OkObjectResult(result.ToDto()));
        }
        public async Task <IActionResult> PostToken()
        {
            var certificate = GetCertificate();

            try
            {
                if (Request.Form == null)
                {
                    return(BuildError(ErrorCodes.InvalidRequestCode, "no parameter in body request", HttpStatusCode.BadRequest));
                }
            }
            catch (Exception)
            {
                return(BuildError(ErrorCodes.InvalidRequestCode, "no parameter in body request", HttpStatusCode.BadRequest));
            }

            var          serializer   = new ParamSerializer();
            var          tokenRequest = serializer.Deserialize <TokenRequest>(Request.Form);
            GrantedToken result       = null;
            StringValues authorizationHeader;
            AuthenticationHeaderValue authenticationHeaderValue = null;

            if (Request.Headers.TryGetValue("Authorization", out authorizationHeader))
            {
                var authorizationHeaderValue         = authorizationHeader.First();
                var splittedAuthorizationHeaderValue = authorizationHeaderValue.Split(' ');
                if (splittedAuthorizationHeaderValue.Count() == 2)
                {
                    authenticationHeaderValue = new AuthenticationHeaderValue(
                        splittedAuthorizationHeaderValue[0],
                        splittedAuthorizationHeaderValue[1]);
                }
            }

            var issuerName = Request.GetAbsoluteUriWithVirtualPath();

            switch (tokenRequest.GrantType)
            {
            case GrantTypes.password:
                var resourceOwnerParameter = tokenRequest.ToResourceOwnerGrantTypeParameter();
                result = await _tokenActions.GetTokenByResourceOwnerCredentialsGrantType(resourceOwnerParameter, authenticationHeaderValue, certificate, issuerName);

                break;

            case GrantTypes.authorization_code:
                var authCodeParameter = tokenRequest.ToAuthorizationCodeGrantTypeParameter();
                result = await _tokenActions.GetTokenByAuthorizationCodeGrantType(authCodeParameter, authenticationHeaderValue, certificate, issuerName);

                break;

            case GrantTypes.refresh_token:
                var refreshTokenParameter = tokenRequest.ToRefreshTokenGrantTypeParameter();
                result = await _tokenActions.GetTokenByRefreshTokenGrantType(refreshTokenParameter, authenticationHeaderValue, certificate, issuerName);

                break;

            case GrantTypes.client_credentials:
                var clientCredentialsParameter = tokenRequest.ToClientCredentialsGrantTypeParameter();
                result = await _tokenActions.GetTokenByClientCredentialsGrantType(clientCredentialsParameter, authenticationHeaderValue, certificate, issuerName);

                break;

            case GrantTypes.uma_ticket:
                var tokenIdParameter = tokenRequest.ToTokenIdGrantTypeParameter();
                result = await _umaTokenActions.GetTokenByTicketId(tokenIdParameter, authenticationHeaderValue, certificate, issuerName);

                break;
            }

            return(new OkObjectResult(result.ToDto()));
        }
 public static T Deserialize <T>(this ParamSerializer paramSerializer, NameValueCollection input)
 {
     return(paramSerializer.Deserialize <T>(ConvertNameValueCollection(input)));
 }