public override async Task <ResourceValidationResult> ValidateRequestedResourcesAsync(ResourceValidationRequest request) { var nvc = _scopedHttpContextRequestForm.GetFormCollection(); var token = nvc["token"]; if (string.IsNullOrWhiteSpace(token)) { token = nvc["refresh_token"]; } if (!string.IsNullOrWhiteSpace(token)) { if (token.StartsWith("1_")) { // this has already been validated. if (request == null) { throw new ArgumentNullException(nameof(request)); } var result = new ResourceValidationResult(); var parsedScopesResult = _scopeParser.ParseScopeValues(request.Scopes); result.ParsedScopes = parsedScopesResult.ParsedScopes; return(result); } } return(await base.ValidateRequestedResourcesAsync(request)); }
/// <inheritdoc/> public virtual async Task <ResourceValidationResult> ValidateRequestedResourcesAsync(ResourceValidationRequest request) { if (request == null) { throw new ArgumentNullException(nameof(request)); } var scopeNames = request.ParsedScopeValues.Select(x => x.Name).Distinct().ToArray(); var resourcesFromStore = await _store.FindEnabledResourcesByScopeAsync(scopeNames); var result = new ResourceValidationResult(); foreach (var scope in request.ParsedScopeValues) { await ValidateScopeAsync(request.Client, resourcesFromStore, scope, result); } if (result.InvalidScopes.Count > 0) { result.Resources.IdentityResources.Clear(); result.Resources.ApiResources.Clear(); result.Resources.ApiScopes.Clear(); result.ParsedScopes.Clear(); } return(result); }
/// <inheritdoc/> public virtual async Task <ResourceValidationResult> ValidateRequestedResourcesAsync(ResourceValidationRequest request) { if (request == null) { throw new ArgumentNullException(nameof(request)); } var parsedScopesResult = _scopeParser.ParseScopeValues(request.Scopes); var result = new ResourceValidationResult(); if (!parsedScopesResult.Succeeded) { foreach (var invalidScope in parsedScopesResult.Errors) { _logger.LogError("Invalid parsed scope {scope}, message: {error}", invalidScope.RawValue, invalidScope.Error); result.InvalidScopes.Add(invalidScope.RawValue); } return(result); } var scopeNames = parsedScopesResult.ParsedScopes.Select(x => x.ParsedName).Distinct().ToArray(); var resourcesFromStore = await _store.FindEnabledResourcesByScopeAsync(scopeNames); foreach (var scope in parsedScopesResult.ParsedScopes) { await ValidateScopeAsync(request.Client, resourcesFromStore, scope, result); } if (result.InvalidScopes.Count > 0) { result.Resources.IdentityResources.Clear(); result.Resources.ApiResources.Clear(); result.Resources.ApiScopes.Clear(); result.ParsedScopes.Clear(); } return(result); }