Skip to content

Commit 8ad7b1f

Browse files
authored
Merge pull request #33 from bornlogic/feature/validate-scopes-consider-user-role
fix validation
2 parents 1eeca16 + 6203ca2 commit 8ad7b1f

File tree

1 file changed

+15
-18
lines changed

1 file changed

+15
-18
lines changed

Bornlogic.IdentityServer/Validation/Default/DefaultResourceValidator.cs

+15-18
Original file line numberDiff line numberDiff line change
@@ -72,30 +72,27 @@ public virtual async Task<ResourceValidationResult> ValidateRequestedResourcesAs
7272
return result;
7373
}
7474

75-
var subjectIdOrDefault = request.Subject?.GetSubjectIdOrDefault();
75+
var scopeNames = parsedScopesResult.ParsedScopes.Select(x => x.ParsedName).Distinct().ToArray();
76+
var resourcesFromStore = await _store.FindEnabledResourcesByScopeAsync(scopeNames);
7677

77-
if (!string.IsNullOrEmpty(subjectIdOrDefault))
78+
foreach (var scope in parsedScopesResult.ParsedScopes)
7879
{
79-
var hasRoleToBypassScopeValidation = await _clientUserRoleService.UserHasLoginByPassRoleInClient(subjectIdOrDefault, request.Client, _clientRoleOptions?.Value?.ValidUserRolesToBypassClientScopeValidation);
80+
await ValidateScopeAsync(request.Client, resourcesFromStore, scope, result, request.RequiredRequestScopes.Any(a => a == scope.ParsedName));
81+
}
8082

81-
if (!hasRoleToBypassScopeValidation)
82-
{
83-
var scopeNames = parsedScopesResult.ParsedScopes.Select(x => x.ParsedName).Distinct().ToArray();
84-
var resourcesFromStore = await _store.FindEnabledResourcesByScopeAsync(scopeNames);
83+
var requiredRequestScopeNames = parsedRequiredRequestScopesResult.ParsedScopes.Select(x => x.ParsedName).Distinct().ToArray();
84+
var requiredRequestResourcesFromStore = await _store.FindEnabledResourcesByScopeAsync(requiredRequestScopeNames);
8585

86-
foreach (var scope in parsedScopesResult.ParsedScopes)
87-
{
88-
await ValidateScopeAsync(request.Client, resourcesFromStore, scope, result, request.RequiredRequestScopes.Any(a => a == scope.ParsedName));
89-
}
86+
foreach (var scope in parsedRequiredRequestScopesResult.ParsedScopes)
87+
{
88+
await ValidateRequestRequiredScopeAsync(request.Client, requiredRequestResourcesFromStore, scope, result);
89+
}
9090

91-
var requiredRequestScopeNames = parsedRequiredRequestScopesResult.ParsedScopes.Select(x => x.ParsedName).Distinct().ToArray();
92-
var requiredRequestResourcesFromStore = await _store.FindEnabledResourcesByScopeAsync(requiredRequestScopeNames);
91+
var subjectIdOrDefault = request.Subject?.GetSubjectIdOrDefault();
9392

94-
foreach (var scope in parsedRequiredRequestScopesResult.ParsedScopes)
95-
{
96-
await ValidateRequestRequiredScopeAsync(request.Client, requiredRequestResourcesFromStore, scope, result);
97-
}
98-
}
93+
if (!string.IsNullOrEmpty(subjectIdOrDefault) && await _clientUserRoleService.UserHasLoginByPassRoleInClient(subjectIdOrDefault, request.Client, _clientRoleOptions?.Value?.ValidUserRolesToBypassClientScopeValidation))
94+
{
95+
result.InvalidScopes.Clear();
9996
}
10097

10198
if (result.InvalidScopes.Count > 0)

0 commit comments

Comments
 (0)