public async Task <IActionResult> PostAuthorizeAsync([FromBody] ConsentAuthorizeRequest authorizeRequest) { var authorizeResponse = new ConsentAuthorizeResponse { Authorized = false, Subject = authorizeRequest.Subject }; if (string.IsNullOrWhiteSpace(authorizeRequest.Subject)) { authorizeResponse.Error = new ConsentBaseResponse.ConsentError { StatusCode = (int)HttpStatusCode.BadRequest, Message = "bad subject" }; return(Unauthorized(authorizeResponse)); } // we are a SubjectAndScopes controller so scopes have to be present; if (authorizeRequest.Scopes == null || !authorizeRequest.Scopes.Any()) { authorizeResponse.Error = new ConsentBaseResponse.ConsentError { StatusCode = (int)HttpStatusCode.BadRequest, Message = "No scopes where requested!" }; return(Unauthorized(authorizeResponse)); } // check if user is in our database. //authorizeResponse.Authorized = authorizeRequest.Subject == "good" || authorizeRequest.Subject == "104758924428036663951" ; authorizeResponse.Authorized = true; // accept all. if (authorizeResponse.Authorized) { authorizeResponse.Scopes = authorizeRequest.Scopes; authorizeResponse.Claims = new List <ConsentAuthorizeResponse.ConsentAuthorizeClaim> { new ConsentAuthorizeResponse.ConsentAuthorizeClaim { Type = "geo_location", Value = "Canada" } }; authorizeResponse.CustomPayload = new MyCustom { ConsentAuthorizeRequest = authorizeRequest, Name = nameof(MyCustom), Value = 1234, Properties = new List <MyCustom.Inner>() { new MyCustom.Inner() { Name = GuidS, Value = 1 }, new MyCustom.Inner() { Name = GuidS, Value = 2 } } }; } else { authorizeResponse.Error = new ConsentBaseResponse.ConsentError { StatusCode = (int)HttpStatusCode.BadRequest, Message = "User is bad!" }; } if (authorizeResponse.Authorized) { return(Ok(authorizeResponse)); } return(Unauthorized(authorizeResponse)); }
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); } }