Exemplo n.º 1
0
        public async Task <ConsentAuthorizeResponseContainer <T> > PostAuthorizationRequestAsync <T>(
            ConsentDiscoveryDocumentResponse discovery,
            ConsentAuthorizeRequest requestObject,
            T context) where T : class
        {
            var response = new ConsentAuthorizeResponseContainer <T> {
                Context = context
            };

            try
            {
                var s_cts = new CancellationTokenSource();
                s_cts.CancelAfter(_options.RequestTimeout);
                var httpClient = GetHttpClient();
                using var httpResponse = await PostJsonContentAsync(discovery.AuthorizeEndpoint, httpClient, requestObject, s_cts.Token);

                if (!httpResponse.IsSuccessStatusCode)
                {
                    response.Response = new ConsentAuthorizeResponse()
                    {
                        Subject    = requestObject.Subject,
                        Scopes     = requestObject.Scopes,
                        Authorized = false,
                        Error      = new ConsentBaseResponse.ConsentError
                        {
                            Message    = $"StatusCode={httpResponse.StatusCode}",
                            StatusCode = (int)httpResponse.StatusCode
                        }
                    };
                    if (httpResponse.Content is object)
                    {
                        var contentText = await httpResponse.Content.ReadAsStringAsync();

                        response.Response.Error.Message = contentText;
                    }
                    _logger.LogError($"authorizationEndPoint={discovery.AuthorizeEndpoint},statusCode={httpResponse.StatusCode},content=\'{response.Response.Error.Message}\'");
                    return(response);
                }


                if (httpResponse.Content is object && httpResponse.Content.Headers.ContentType.MediaType == "application/json")
                {
                    var contentStream = await httpResponse.Content.ReadAsStreamAsync();

                    var consentAuthorizeResponse = await System.Text.Json.JsonSerializer.DeserializeAsync <ConsentAuthorizeResponse>(contentStream, new System.Text.Json.JsonSerializerOptions {
                        IgnoreNullValues = true, PropertyNameCaseInsensitive = true
                    });

                    response.Response = consentAuthorizeResponse;
                    return(response);
                }
                throw new Exception("HTTP Response was invalid and cannot be deserialized.");
            }
            catch (Exception ex)
            {
                response.Response = new ConsentAuthorizeResponse()
                {
                    Subject    = requestObject.Subject,
                    Scopes     = requestObject.Scopes,
                    Authorized = false,
                    Error      = new ConsentBaseResponse.ConsentError
                    {
                        Message    = ex.Message,
                        StatusCode = (int)HttpStatusCode.BadRequest
                    }
                };
                return(response);
            }
        }
        public async Task <ConsentAuthorizeResponse> PostAuthorizationRequestAsync(
            ConsentDiscoveryDocumentResponse discovery,
            ConsentAuthorizeRequest requestObject)
        {
            try
            {
                var httpClient = new HttpClient();
                using var httpResponse = await PostJsonContentAsync(discovery.AuthorizeEndpoint, httpClient, requestObject);

                if (!httpResponse.IsSuccessStatusCode)
                {
                    var result = new ConsentAuthorizeResponse()
                    {
                        Subject    = requestObject.Subject,
                        Scopes     = requestObject.Scopes,
                        Authorized = false,
                        Error      = new Error
                        {
                            Message    = $"StatusCode={httpResponse.StatusCode}",
                            StatusCode = (int)httpResponse.StatusCode
                        }
                    };
                    if (httpResponse.Content is object)
                    {
                        var contentText = await httpResponse.Content.ReadAsStringAsync();

                        result.Error.Message = contentText;
                    }
                    _logger.LogError($"statusCode={httpResponse.StatusCode},content=\'{result.Error.Message}\'");
                    return(result);
                }


                if (httpResponse.Content is object && httpResponse.Content.Headers.ContentType.MediaType == "application/json")
                {
                    var contentStream = await httpResponse.Content.ReadAsStreamAsync();

                    var consentAuthorizeResponse = await System.Text.Json.JsonSerializer.DeserializeAsync <ConsentAuthorizeResponse>(contentStream, new System.Text.Json.JsonSerializerOptions {
                        IgnoreNullValues = true, PropertyNameCaseInsensitive = true
                    });

                    return(consentAuthorizeResponse);
                }
                throw new Exception("HTTP Response was invalid and cannot be deserialised.");
            }
            catch (Exception ex)
            {
                var result = new ConsentAuthorizeResponse()
                {
                    Subject    = requestObject.Subject,
                    Scopes     = requestObject.Scopes,
                    Authorized = false,
                    Error      = new Error
                    {
                        Message    = ex.Message,
                        StatusCode = (int)HttpStatusCode.BadRequest
                    }
                };
                return(result);
            }
        }