예제 #1
0
        public async Task <Tuple <IdentityTokenResponse, IdentityTwoFactorResponse> > PostIdentityTokenAsync(
            TokenRequest request)
        {
            var requestMessage = new HttpRequestMessage
            {
                Version    = new Version(1, 0),
                RequestUri = new Uri(string.Concat(IdentityBaseUrl, "/connect/token")),
                Method     = HttpMethod.Post,
                Content    = new FormUrlEncodedContent(request.ToIdentityToken(_platformUtilsService.IdentityClientId))
            };

            requestMessage.Headers.Add("Accept", "application/json");
            request.AlterIdentityTokenHeaders(requestMessage.Headers);

            HttpResponseMessage response;

            try
            {
                response = await _httpClient.SendAsync(requestMessage);
            }
            catch (Exception e)
            {
                throw new ApiException(HandleWebError(e));
            }
            JObject responseJObject = null;

            if (IsJsonResponse(response))
            {
                var responseJsonString = await response.Content.ReadAsStringAsync();

                responseJObject = JObject.Parse(responseJsonString);
            }

            if (responseJObject != null)
            {
                if (response.IsSuccessStatusCode)
                {
                    return(new Tuple <IdentityTokenResponse, IdentityTwoFactorResponse>(
                               responseJObject.ToObject <IdentityTokenResponse>(), null));
                }
                else if (response.StatusCode == HttpStatusCode.BadRequest &&
                         responseJObject.ContainsKey("TwoFactorProviders2") &&
                         responseJObject["TwoFactorProviders2"] != null &&
                         responseJObject["TwoFactorProviders2"].HasValues)
                {
                    return(new Tuple <IdentityTokenResponse, IdentityTwoFactorResponse>(
                               null, responseJObject.ToObject <IdentityTwoFactorResponse>()));
                }
            }
            throw new ApiException(new ErrorResponse(responseJObject, response.StatusCode, true));
        }
예제 #2
0
        public async Task <IdentityResponse> PostIdentityTokenAsync(TokenRequest request)
        {
            var requestMessage = new HttpRequestMessage
            {
                Version    = new Version(1, 0),
                RequestUri = new Uri(string.Concat(IdentityBaseUrl, "/connect/token")),
                Method     = HttpMethod.Post,
                Content    = new FormUrlEncodedContent(request.ToIdentityToken(_platformUtilsService.IdentityClientId))
            };

            requestMessage.Headers.Add("Accept", "application/json");
            request.AlterIdentityTokenHeaders(requestMessage.Headers);

            HttpResponseMessage response;

            try
            {
                response = await _httpClient.SendAsync(requestMessage);
            }
            catch (Exception e)
            {
                throw new ApiException(HandleWebError(e));
            }
            JObject responseJObject = null;

            if (IsJsonResponse(response))
            {
                var responseJsonString = await response.Content.ReadAsStringAsync();

                responseJObject = JObject.Parse(responseJsonString);
            }

            var identityResponse = new IdentityResponse(response.StatusCode, responseJObject);

            if (identityResponse.FailedToParse)
            {
                throw new ApiException(new ErrorResponse(responseJObject, response.StatusCode, true));
            }

            return(identityResponse);
        }