diff --git a/eng/ProjectReferences.props b/eng/ProjectReferences.props
index e0f67e29745d..fbd9a9df533a 100644
--- a/eng/ProjectReferences.props
+++ b/eng/ProjectReferences.props
@@ -65,6 +65,8 @@
+
+
diff --git a/eng/SharedFramework.Local.props b/eng/SharedFramework.Local.props
index 089cea8bb5ca..4c3258f85682 100644
--- a/eng/SharedFramework.Local.props
+++ b/eng/SharedFramework.Local.props
@@ -10,6 +10,8 @@
+
+
diff --git a/src/Http/Http.Abstractions/src/Microsoft.AspNetCore.Http.Abstractions.csproj b/src/Http/Http.Abstractions/src/Microsoft.AspNetCore.Http.Abstractions.csproj
index d5b065b3d855..0b8e084da4d7 100644
--- a/src/Http/Http.Abstractions/src/Microsoft.AspNetCore.Http.Abstractions.csproj
+++ b/src/Http/Http.Abstractions/src/Microsoft.AspNetCore.Http.Abstractions.csproj
@@ -20,6 +20,7 @@ Microsoft.AspNetCore.Http.HttpResponse
+
diff --git a/src/Http/Http.Abstractions/src/IAllowAnonymous.cs b/src/Security/Authorization/Common.Abstractions/src/IAllowAnonymous.cs
similarity index 100%
rename from src/Http/Http.Abstractions/src/IAllowAnonymous.cs
rename to src/Security/Authorization/Common.Abstractions/src/IAllowAnonymous.cs
diff --git a/src/Http/Http.Abstractions/src/IAuthorizeData.cs b/src/Security/Authorization/Common.Abstractions/src/IAuthorizeData.cs
similarity index 100%
rename from src/Http/Http.Abstractions/src/IAuthorizeData.cs
rename to src/Security/Authorization/Common.Abstractions/src/IAuthorizeData.cs
diff --git a/src/Security/Authorization/Common.Abstractions/src/Microsoft.AspNetCore.Authorization.Common.Abstractions.csproj b/src/Security/Authorization/Common.Abstractions/src/Microsoft.AspNetCore.Authorization.Common.Abstractions.csproj
new file mode 100644
index 000000000000..5d458f30edf2
--- /dev/null
+++ b/src/Security/Authorization/Common.Abstractions/src/Microsoft.AspNetCore.Authorization.Common.Abstractions.csproj
@@ -0,0 +1,9 @@
+
+
+
+ netstandard2.0
+ true
+ true
+
+
+
diff --git a/src/Security/Authorization/Core/src/AllowAnonymousAttribute.cs b/src/Security/Authorization/Common/src/AllowAnonymousAttribute.cs
similarity index 100%
rename from src/Security/Authorization/Core/src/AllowAnonymousAttribute.cs
rename to src/Security/Authorization/Common/src/AllowAnonymousAttribute.cs
diff --git a/src/Security/Authorization/Core/src/AssertionRequirement.cs b/src/Security/Authorization/Common/src/AssertionRequirement.cs
similarity index 100%
rename from src/Security/Authorization/Core/src/AssertionRequirement.cs
rename to src/Security/Authorization/Common/src/AssertionRequirement.cs
diff --git a/src/Security/Authorization/Core/src/AuthorizationFailure.cs b/src/Security/Authorization/Common/src/AuthorizationFailure.cs
similarity index 100%
rename from src/Security/Authorization/Core/src/AuthorizationFailure.cs
rename to src/Security/Authorization/Common/src/AuthorizationFailure.cs
diff --git a/src/Security/Authorization/Core/src/AuthorizationHandler.cs b/src/Security/Authorization/Common/src/AuthorizationHandler.cs
similarity index 100%
rename from src/Security/Authorization/Core/src/AuthorizationHandler.cs
rename to src/Security/Authorization/Common/src/AuthorizationHandler.cs
diff --git a/src/Security/Authorization/Core/src/AuthorizationHandlerContext.cs b/src/Security/Authorization/Common/src/AuthorizationHandlerContext.cs
similarity index 99%
rename from src/Security/Authorization/Core/src/AuthorizationHandlerContext.cs
rename to src/Security/Authorization/Common/src/AuthorizationHandlerContext.cs
index b6378e4073aa..d0abba917efc 100644
--- a/src/Security/Authorization/Core/src/AuthorizationHandlerContext.cs
+++ b/src/Security/Authorization/Common/src/AuthorizationHandlerContext.cs
@@ -95,4 +95,4 @@ public virtual void Succeed(IAuthorizationRequirement requirement)
_pendingRequirements.Remove(requirement);
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Security/Authorization/Core/src/AuthorizationOptions.cs b/src/Security/Authorization/Common/src/AuthorizationOptions.cs
similarity index 100%
rename from src/Security/Authorization/Core/src/AuthorizationOptions.cs
rename to src/Security/Authorization/Common/src/AuthorizationOptions.cs
diff --git a/src/Security/Authorization/Core/src/AuthorizationPolicy.cs b/src/Security/Authorization/Common/src/AuthorizationPolicy.cs
similarity index 97%
rename from src/Security/Authorization/Core/src/AuthorizationPolicy.cs
rename to src/Security/Authorization/Common/src/AuthorizationPolicy.cs
index d68087791e59..04b25c3f175f 100644
--- a/src/Security/Authorization/Core/src/AuthorizationPolicy.cs
+++ b/src/Security/Authorization/Common/src/AuthorizationPolicy.cs
@@ -5,6 +5,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
+using Microsoft.AspNetCore.Authorization.Common;
namespace Microsoft.AspNetCore.Authorization
{
@@ -143,7 +144,8 @@ public static async Task CombineAsync(IAuthorizationPolicyP
var policy = await policyProvider.GetPolicyAsync(authorizeDatum.Policy);
if (policy == null)
{
- throw new InvalidOperationException(Resources.FormatException_AuthorizationPolicyNotFound(authorizeDatum.Policy));
+ throw new InvalidOperationException(
+ string.Format(Resources.Exception_AuthorizationPolicyNotFound, authorizeDatum.Policy));
}
policyBuilder.Combine(policy);
useDefaultPolicy = false;
@@ -179,4 +181,4 @@ public static async Task CombineAsync(IAuthorizationPolicyP
return policyBuilder?.Build();
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Security/Authorization/Core/src/AuthorizationPolicyBuilder.cs b/src/Security/Authorization/Common/src/AuthorizationPolicyBuilder.cs
similarity index 100%
rename from src/Security/Authorization/Core/src/AuthorizationPolicyBuilder.cs
rename to src/Security/Authorization/Common/src/AuthorizationPolicyBuilder.cs
diff --git a/src/Security/Authorization/Core/src/AuthorizationResult.cs b/src/Security/Authorization/Common/src/AuthorizationResult.cs
similarity index 100%
rename from src/Security/Authorization/Core/src/AuthorizationResult.cs
rename to src/Security/Authorization/Common/src/AuthorizationResult.cs
diff --git a/src/Security/Authorization/Common/src/AuthorizationServiceCollectionCommonExtensions.cs b/src/Security/Authorization/Common/src/AuthorizationServiceCollectionCommonExtensions.cs
new file mode 100644
index 000000000000..053095608c21
--- /dev/null
+++ b/src/Security/Authorization/Common/src/AuthorizationServiceCollectionCommonExtensions.cs
@@ -0,0 +1,64 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+using System;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Authorization.Infrastructure;
+using Microsoft.AspNetCore.Authorization.Policy;
+using Microsoft.Extensions.DependencyInjection.Extensions;
+
+namespace Microsoft.Extensions.DependencyInjection
+{
+ ///
+ /// Extension methods for setting up authorization services in an .
+ ///
+ public static class AuthorizationServiceCollectionCommonExtensions
+ {
+ ///
+ /// Adds authorization services to the specified .
+ ///
+ /// The to add services to.
+ /// The so that additional calls can be chained.
+ public static IServiceCollection AddAuthorizationCommon(this IServiceCollection services)
+ {
+ if (services == null)
+ {
+ throw new ArgumentNullException(nameof(services));
+ }
+
+ services.TryAdd(ServiceDescriptor.Transient());
+ services.TryAdd(ServiceDescriptor.Transient());
+ services.TryAdd(ServiceDescriptor.Transient());
+ services.TryAdd(ServiceDescriptor.Transient());
+ services.TryAdd(ServiceDescriptor.Transient());
+ services.TryAddEnumerable(ServiceDescriptor.Transient());
+
+ // Policy
+ services.TryAdd(ServiceDescriptor.Transient());
+
+ return services;
+ }
+
+ ///
+ /// Adds authorization services to the specified .
+ ///
+ /// The to add services to.
+ /// An action delegate to configure the provided .
+ /// The so that additional calls can be chained.
+ public static IServiceCollection AddAuthorizationCommon(this IServiceCollection services, Action configure)
+ {
+ if (services == null)
+ {
+ throw new ArgumentNullException(nameof(services));
+ }
+
+ if (configure == null)
+ {
+ throw new ArgumentNullException(nameof(configure));
+ }
+
+ services.Configure(configure);
+ return services.AddAuthorizationCommon();
+ }
+ }
+}
diff --git a/src/Security/Authorization/Core/src/AuthorizationServiceExtensions.cs b/src/Security/Authorization/Common/src/AuthorizationServiceExtensions.cs
similarity index 100%
rename from src/Security/Authorization/Core/src/AuthorizationServiceExtensions.cs
rename to src/Security/Authorization/Common/src/AuthorizationServiceExtensions.cs
diff --git a/src/Security/Authorization/Core/src/AuthorizeAttribute.cs b/src/Security/Authorization/Common/src/AuthorizeAttribute.cs
similarity index 100%
rename from src/Security/Authorization/Core/src/AuthorizeAttribute.cs
rename to src/Security/Authorization/Common/src/AuthorizeAttribute.cs
diff --git a/src/Security/Authorization/Core/src/ClaimsAuthorizationRequirement.cs b/src/Security/Authorization/Common/src/ClaimsAuthorizationRequirement.cs
similarity index 100%
rename from src/Security/Authorization/Core/src/ClaimsAuthorizationRequirement.cs
rename to src/Security/Authorization/Common/src/ClaimsAuthorizationRequirement.cs
diff --git a/src/Security/Authorization/Core/src/DefaultAuthorizationEvaluator.cs b/src/Security/Authorization/Common/src/DefaultAuthorizationEvaluator.cs
similarity index 100%
rename from src/Security/Authorization/Core/src/DefaultAuthorizationEvaluator.cs
rename to src/Security/Authorization/Common/src/DefaultAuthorizationEvaluator.cs
diff --git a/src/Security/Authorization/Core/src/DefaultAuthorizationHandlerContextFactory.cs b/src/Security/Authorization/Common/src/DefaultAuthorizationHandlerContextFactory.cs
similarity index 100%
rename from src/Security/Authorization/Core/src/DefaultAuthorizationHandlerContextFactory.cs
rename to src/Security/Authorization/Common/src/DefaultAuthorizationHandlerContextFactory.cs
diff --git a/src/Security/Authorization/Core/src/DefaultAuthorizationHandlerProvider.cs b/src/Security/Authorization/Common/src/DefaultAuthorizationHandlerProvider.cs
similarity index 100%
rename from src/Security/Authorization/Core/src/DefaultAuthorizationHandlerProvider.cs
rename to src/Security/Authorization/Common/src/DefaultAuthorizationHandlerProvider.cs
diff --git a/src/Security/Authorization/Core/src/DefaultAuthorizationPolicyProvider.cs b/src/Security/Authorization/Common/src/DefaultAuthorizationPolicyProvider.cs
similarity index 100%
rename from src/Security/Authorization/Core/src/DefaultAuthorizationPolicyProvider.cs
rename to src/Security/Authorization/Common/src/DefaultAuthorizationPolicyProvider.cs
diff --git a/src/Security/Authorization/Core/src/DefaultAuthorizationService.cs b/src/Security/Authorization/Common/src/DefaultAuthorizationService.cs
similarity index 99%
rename from src/Security/Authorization/Core/src/DefaultAuthorizationService.cs
rename to src/Security/Authorization/Common/src/DefaultAuthorizationService.cs
index bc5d571c47bc..60efc4a7510d 100644
--- a/src/Security/Authorization/Core/src/DefaultAuthorizationService.cs
+++ b/src/Security/Authorization/Common/src/DefaultAuthorizationService.cs
@@ -132,4 +132,4 @@ public async Task AuthorizeAsync(ClaimsPrincipal user, obje
return await this.AuthorizeAsync(user, resource, policy);
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Security/Authorization/Core/src/DenyAnonymousAuthorizationRequirement.cs b/src/Security/Authorization/Common/src/DenyAnonymousAuthorizationRequirement.cs
similarity index 100%
rename from src/Security/Authorization/Core/src/DenyAnonymousAuthorizationRequirement.cs
rename to src/Security/Authorization/Common/src/DenyAnonymousAuthorizationRequirement.cs
diff --git a/src/Security/Authorization/Core/src/IAuthorizationEvaluator.cs b/src/Security/Authorization/Common/src/IAuthorizationEvaluator.cs
similarity index 100%
rename from src/Security/Authorization/Core/src/IAuthorizationEvaluator.cs
rename to src/Security/Authorization/Common/src/IAuthorizationEvaluator.cs
diff --git a/src/Security/Authorization/Core/src/IAuthorizationHandler.cs b/src/Security/Authorization/Common/src/IAuthorizationHandler.cs
similarity index 100%
rename from src/Security/Authorization/Core/src/IAuthorizationHandler.cs
rename to src/Security/Authorization/Common/src/IAuthorizationHandler.cs
diff --git a/src/Security/Authorization/Core/src/IAuthorizationHandlerContextFactory.cs b/src/Security/Authorization/Common/src/IAuthorizationHandlerContextFactory.cs
similarity index 100%
rename from src/Security/Authorization/Core/src/IAuthorizationHandlerContextFactory.cs
rename to src/Security/Authorization/Common/src/IAuthorizationHandlerContextFactory.cs
diff --git a/src/Security/Authorization/Core/src/IAuthorizationHandlerProvider.cs b/src/Security/Authorization/Common/src/IAuthorizationHandlerProvider.cs
similarity index 100%
rename from src/Security/Authorization/Core/src/IAuthorizationHandlerProvider.cs
rename to src/Security/Authorization/Common/src/IAuthorizationHandlerProvider.cs
diff --git a/src/Security/Authorization/Core/src/IAuthorizationPolicyProvider.cs b/src/Security/Authorization/Common/src/IAuthorizationPolicyProvider.cs
similarity index 100%
rename from src/Security/Authorization/Core/src/IAuthorizationPolicyProvider.cs
rename to src/Security/Authorization/Common/src/IAuthorizationPolicyProvider.cs
diff --git a/src/Security/Authorization/Core/src/IAuthorizationRequirement.cs b/src/Security/Authorization/Common/src/IAuthorizationRequirement.cs
similarity index 100%
rename from src/Security/Authorization/Core/src/IAuthorizationRequirement.cs
rename to src/Security/Authorization/Common/src/IAuthorizationRequirement.cs
diff --git a/src/Security/Authorization/Core/src/IAuthorizationService.cs b/src/Security/Authorization/Common/src/IAuthorizationService.cs
similarity index 100%
rename from src/Security/Authorization/Core/src/IAuthorizationService.cs
rename to src/Security/Authorization/Common/src/IAuthorizationService.cs
diff --git a/src/Security/Authorization/Core/src/LoggingExtensions.cs b/src/Security/Authorization/Common/src/LoggingExtensions.cs
similarity index 100%
rename from src/Security/Authorization/Core/src/LoggingExtensions.cs
rename to src/Security/Authorization/Common/src/LoggingExtensions.cs
diff --git a/src/Security/Authorization/Common/src/Microsoft.AspNetCore.Authorization.Common.csproj b/src/Security/Authorization/Common/src/Microsoft.AspNetCore.Authorization.Common.csproj
new file mode 100644
index 000000000000..358f92eb8661
--- /dev/null
+++ b/src/Security/Authorization/Common/src/Microsoft.AspNetCore.Authorization.Common.csproj
@@ -0,0 +1,28 @@
+
+
+
+ netstandard2.0
+ true
+ true
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+ Resources.resx
+
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+
+
diff --git a/src/Security/Authorization/Core/src/NameAuthorizationRequirement.cs b/src/Security/Authorization/Common/src/NameAuthorizationRequirement.cs
similarity index 100%
rename from src/Security/Authorization/Core/src/NameAuthorizationRequirement.cs
rename to src/Security/Authorization/Common/src/NameAuthorizationRequirement.cs
diff --git a/src/Security/Authorization/Core/src/OperationAuthorizationRequirement.cs b/src/Security/Authorization/Common/src/OperationAuthorizationRequirement.cs
similarity index 100%
rename from src/Security/Authorization/Core/src/OperationAuthorizationRequirement.cs
rename to src/Security/Authorization/Common/src/OperationAuthorizationRequirement.cs
diff --git a/src/Security/Authorization/Core/src/PassThroughAuthorizationHandler.cs b/src/Security/Authorization/Common/src/PassThroughAuthorizationHandler.cs
similarity index 100%
rename from src/Security/Authorization/Core/src/PassThroughAuthorizationHandler.cs
rename to src/Security/Authorization/Common/src/PassThroughAuthorizationHandler.cs
diff --git a/src/Security/Authorization/Common/src/Policy/CommonPolicyEvaluator.cs b/src/Security/Authorization/Common/src/Policy/CommonPolicyEvaluator.cs
new file mode 100644
index 000000000000..34531b82b85e
--- /dev/null
+++ b/src/Security/Authorization/Common/src/Policy/CommonPolicyEvaluator.cs
@@ -0,0 +1,60 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+using System;
+using System.Security.Claims;
+using System.Threading.Tasks;
+
+namespace Microsoft.AspNetCore.Authorization.Policy
+{
+ public class CommonPolicyEvaluator : ICommonPolicyEvaluator
+ {
+ private readonly IAuthorizationService _authorization;
+
+ ///
+ /// Constructor
+ ///
+ /// The authorization service.
+ public CommonPolicyEvaluator(IAuthorizationService authorization)
+ {
+ _authorization = authorization;
+ }
+
+ ///
+ /// Attempts authorization for a policy using .
+ ///
+ /// The .
+ /// True if authentication succeeded, otherwise false.
+ /// The .
+ ///
+ /// An optional resource the policy should be checked with.
+ /// If a resource is not required for policy evaluation you may pass null as the value.
+ ///
+ /// Returns if authorization succeeds.
+ /// Otherwise returns if , otherwise
+ /// returns
+ public virtual async Task AuthorizeAsync(AuthorizationPolicy policy, bool authenticationSucceeded, ClaimsPrincipal user, object resource)
+ {
+ if (policy == null)
+ {
+ throw new ArgumentNullException(nameof(policy));
+ }
+
+ if (user == null)
+ {
+ throw new ArgumentNullException(nameof(user));
+ }
+
+ var result = await _authorization.AuthorizeAsync(user, resource, policy);
+ if (result.Succeeded)
+ {
+ return PolicyAuthorizationResult.Success();
+ }
+
+ // If authentication was successful, return forbidden, otherwise challenge
+ return authenticationSucceeded
+ ? PolicyAuthorizationResult.Forbid()
+ : PolicyAuthorizationResult.Challenge();
+ }
+ }
+}
diff --git a/src/Security/Authorization/Common/src/Policy/ICommonPolicyEvaluator.cs b/src/Security/Authorization/Common/src/Policy/ICommonPolicyEvaluator.cs
new file mode 100644
index 000000000000..a68b268ba04c
--- /dev/null
+++ b/src/Security/Authorization/Common/src/Policy/ICommonPolicyEvaluator.cs
@@ -0,0 +1,26 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+using System.Security.Claims;
+using System.Threading.Tasks;
+
+namespace Microsoft.AspNetCore.Authorization.Policy
+{
+ public interface ICommonPolicyEvaluator
+ {
+ ///
+ /// Attempts authorization for a policy using .
+ ///
+ /// The .
+ /// True if authentication succeeded, otherwise false.
+ /// The .
+ ///
+ /// An optional resource the policy should be checked with.
+ /// If a resource is not required for policy evaluation you may pass null as the value.
+ ///
+ /// Returns if authorization succeeds.
+ /// Otherwise returns if , otherwise
+ /// returns
+ Task AuthorizeAsync(AuthorizationPolicy policy, bool authenticationSucceeded, ClaimsPrincipal user, object resource);
+ }
+}
diff --git a/src/Security/Authorization/Core/src/Policy/PolicyAuthorizationResult.cs b/src/Security/Authorization/Common/src/Policy/PolicyAuthorizationResult.cs
similarity index 99%
rename from src/Security/Authorization/Core/src/Policy/PolicyAuthorizationResult.cs
rename to src/Security/Authorization/Common/src/Policy/PolicyAuthorizationResult.cs
index d7d481dcd6ee..3150311d0eda 100644
--- a/src/Security/Authorization/Core/src/Policy/PolicyAuthorizationResult.cs
+++ b/src/Security/Authorization/Common/src/Policy/PolicyAuthorizationResult.cs
@@ -32,4 +32,4 @@ public static PolicyAuthorizationResult Success()
=> new PolicyAuthorizationResult { Succeeded = true };
}
-}
\ No newline at end of file
+}
diff --git a/src/Security/Authorization/Common/src/Resources.Designer.cs b/src/Security/Authorization/Common/src/Resources.Designer.cs
new file mode 100644
index 000000000000..3f4f42cffe02
--- /dev/null
+++ b/src/Security/Authorization/Common/src/Resources.Designer.cs
@@ -0,0 +1,99 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace Microsoft.AspNetCore.Authorization.Common {
+ using System;
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.AspNetCore.Authorization.Common.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to AuthorizationPolicy must have at least one requirement..
+ ///
+ internal static string Exception_AuthorizationPolicyEmpty {
+ get {
+ return ResourceManager.GetString("Exception_AuthorizationPolicyEmpty", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The AuthorizationPolicy named: '{0}' was not found..
+ ///
+ internal static string Exception_AuthorizationPolicyNotFound {
+ get {
+ return ResourceManager.GetString("Exception_AuthorizationPolicyNotFound", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to At least one role must be specified..
+ ///
+ internal static string Exception_RoleRequirementEmpty {
+ get {
+ return ResourceManager.GetString("Exception_RoleRequirementEmpty", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Unable to find the required services. Please add all the required services by calling '{0}.{1}' inside the call to '{2}' in the application startup code..
+ ///
+ internal static string Exception_UnableToFindServices {
+ get {
+ return ResourceManager.GetString("Exception_UnableToFindServices", resourceCulture);
+ }
+ }
+ }
+}
diff --git a/src/Security/Authorization/Common/src/Resources.resx b/src/Security/Authorization/Common/src/Resources.resx
new file mode 100644
index 000000000000..ebf1328616db
--- /dev/null
+++ b/src/Security/Authorization/Common/src/Resources.resx
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ AuthorizationPolicy must have at least one requirement.
+
+
+ The AuthorizationPolicy named: '{0}' was not found.
+
+
+ At least one role must be specified.
+
+
+ Unable to find the required services. Please add all the required services by calling '{0}.{1}' inside the call to '{2}' in the application startup code.
+
+
\ No newline at end of file
diff --git a/src/Security/Authorization/Core/src/RolesAuthorizationRequirement.cs b/src/Security/Authorization/Common/src/RolesAuthorizationRequirement.cs
similarity index 98%
rename from src/Security/Authorization/Core/src/RolesAuthorizationRequirement.cs
rename to src/Security/Authorization/Common/src/RolesAuthorizationRequirement.cs
index 811e17aacda5..4b019540d824 100644
--- a/src/Security/Authorization/Core/src/RolesAuthorizationRequirement.cs
+++ b/src/Security/Authorization/Common/src/RolesAuthorizationRequirement.cs
@@ -5,6 +5,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
+using Microsoft.AspNetCore.Authorization.Common;
namespace Microsoft.AspNetCore.Authorization.Infrastructure
{
diff --git a/src/Security/Authorization/Core/src/AuthorizationMarkerService.cs b/src/Security/Authorization/Core/src/AuthorizationMarkerService.cs
index 122d237e8cf9..c954c939bbb7 100644
--- a/src/Security/Authorization/Core/src/AuthorizationMarkerService.cs
+++ b/src/Security/Authorization/Core/src/AuthorizationMarkerService.cs
@@ -1,7 +1,7 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-namespace Microsoft.AspNetCore.Authorization.Policy
+namespace Microsoft.AspNetCore.Authorization
{
internal class AuthorizationMarkerService
{
diff --git a/src/Security/Authorization/Core/src/AuthorizationServiceCollectionExtensions.cs b/src/Security/Authorization/Core/src/AuthorizationServiceCollectionExtensions.cs
index c3b0dc580bc1..7b726428ff67 100644
--- a/src/Security/Authorization/Core/src/AuthorizationServiceCollectionExtensions.cs
+++ b/src/Security/Authorization/Core/src/AuthorizationServiceCollectionExtensions.cs
@@ -3,7 +3,6 @@
using System;
using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Authorization.Infrastructure;
using Microsoft.AspNetCore.Authorization.Policy;
using Microsoft.Extensions.DependencyInjection.Extensions;
@@ -25,13 +24,8 @@ public static IServiceCollection AddAuthorization(this IServiceCollection servic
{
throw new ArgumentNullException(nameof(services));
}
-
- services.TryAdd(ServiceDescriptor.Transient());
- services.TryAdd(ServiceDescriptor.Transient());
- services.TryAdd(ServiceDescriptor.Transient());
- services.TryAdd(ServiceDescriptor.Transient());
- services.TryAdd(ServiceDescriptor.Transient());
- services.TryAddEnumerable(ServiceDescriptor.Transient());
+
+ services.AddAuthorizationCommon();
services.TryAddSingleton();
// Policy
diff --git a/src/Security/Authorization/Core/src/Microsoft.AspNetCore.Authorization.csproj b/src/Security/Authorization/Core/src/Microsoft.AspNetCore.Authorization.csproj
index 726247c53b63..59ae79658a72 100644
--- a/src/Security/Authorization/Core/src/Microsoft.AspNetCore.Authorization.csproj
+++ b/src/Security/Authorization/Core/src/Microsoft.AspNetCore.Authorization.csproj
@@ -18,6 +18,7 @@ Microsoft.AspNetCore.Authorization.AuthorizeAttribute
+
diff --git a/src/Security/Authorization/Core/src/Policy/AuthorizationAppBuilderExtensions.cs b/src/Security/Authorization/Core/src/Policy/AuthorizationAppBuilderExtensions.cs
index a34551243bfa..0b52997046f4 100644
--- a/src/Security/Authorization/Core/src/Policy/AuthorizationAppBuilderExtensions.cs
+++ b/src/Security/Authorization/Core/src/Policy/AuthorizationAppBuilderExtensions.cs
@@ -3,7 +3,6 @@
using System;
using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Authorization.Policy;
using Microsoft.Extensions.DependencyInjection;
namespace Microsoft.AspNetCore.Builder
diff --git a/src/Security/Authorization/Core/src/Policy/PolicyEvaluator.cs b/src/Security/Authorization/Core/src/Policy/PolicyEvaluator.cs
index 3100ff4d3ebd..1bc9077da960 100644
--- a/src/Security/Authorization/Core/src/Policy/PolicyEvaluator.cs
+++ b/src/Security/Authorization/Core/src/Policy/PolicyEvaluator.cs
@@ -1,7 +1,6 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-using System;
using System.Security.Claims;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication;
@@ -12,15 +11,15 @@ namespace Microsoft.AspNetCore.Authorization.Policy
{
public class PolicyEvaluator : IPolicyEvaluator
{
- private readonly IAuthorizationService _authorization;
+ private readonly ICommonPolicyEvaluator _commonPolicyEvaluator;
///
/// Constructor
///
- /// The authorization service.
- public PolicyEvaluator(IAuthorizationService authorization)
+ /// The .
+ public PolicyEvaluator(ICommonPolicyEvaluator commonPolicyEvaluator)
{
- _authorization = authorization;
+ _commonPolicyEvaluator = commonPolicyEvaluator;
}
///
@@ -74,23 +73,9 @@ public virtual async Task AuthenticateAsync(AuthorizationPol
/// Returns if authorization succeeds.
/// Otherwise returns if , otherwise
/// returns
- public virtual async Task AuthorizeAsync(AuthorizationPolicy policy, AuthenticateResult authenticationResult, HttpContext context, object resource)
+ public virtual Task AuthorizeAsync(AuthorizationPolicy policy, AuthenticateResult authenticationResult, HttpContext context, object resource)
{
- if (policy == null)
- {
- throw new ArgumentNullException(nameof(policy));
- }
-
- var result = await _authorization.AuthorizeAsync(context.User, resource, policy);
- if (result.Succeeded)
- {
- return PolicyAuthorizationResult.Success();
- }
-
- // If authentication was successful, return forbidden, otherwise challenge
- return (authenticationResult.Succeeded)
- ? PolicyAuthorizationResult.Forbid()
- : PolicyAuthorizationResult.Challenge();
+ return _commonPolicyEvaluator.AuthorizeAsync(policy, authenticationResult.Succeeded, context.User, resource);
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Security/Authorization/Core/src/Resources.resx b/src/Security/Authorization/Core/src/Resources.resx
index ebf1328616db..15d6f7d53c0f 100644
--- a/src/Security/Authorization/Core/src/Resources.resx
+++ b/src/Security/Authorization/Core/src/Resources.resx
@@ -117,15 +117,6 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- AuthorizationPolicy must have at least one requirement.
-
-
- The AuthorizationPolicy named: '{0}' was not found.
-
-
- At least one role must be specified.
-
Unable to find the required services. Please add all the required services by calling '{0}.{1}' inside the call to '{2}' in the application startup code.
diff --git a/src/Security/Security.sln b/src/Security/Security.sln
index cf56b8509166..be42e8afc8b6 100644
--- a/src/Security/Security.sln
+++ b/src/Security/Security.sln
@@ -136,6 +136,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Routin
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IISIntegration", "..\Servers\IIS\IISIntegration\src\Microsoft.AspNetCore.Server.IISIntegration.csproj", "{FD3AB895-2AF6-447D-82CF-DB002B491D23}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authorization.Common", "Authorization\Common\src\Microsoft.AspNetCore.Authorization.Common.csproj", "{2DA3C692-349E-4FC5-A559-3227088DA9D2}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authorization.Common.Abstractions", "Authorization\Common.Abstractions\src\Microsoft.AspNetCore.Authorization.Common.Abstractions.csproj", "{4C022272-CC58-4538-AF25-C1F5106B428D}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -350,6 +354,14 @@ Global
{FD3AB895-2AF6-447D-82CF-DB002B491D23}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FD3AB895-2AF6-447D-82CF-DB002B491D23}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FD3AB895-2AF6-447D-82CF-DB002B491D23}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2DA3C692-349E-4FC5-A559-3227088DA9D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2DA3C692-349E-4FC5-A559-3227088DA9D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2DA3C692-349E-4FC5-A559-3227088DA9D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2DA3C692-349E-4FC5-A559-3227088DA9D2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4C022272-CC58-4538-AF25-C1F5106B428D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4C022272-CC58-4538-AF25-C1F5106B428D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4C022272-CC58-4538-AF25-C1F5106B428D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4C022272-CC58-4538-AF25-C1F5106B428D}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -417,6 +429,8 @@ Global
{5B2F3890-198E-4BE8-8464-10B4D97F976A} = {A3766414-EB5C-40F7-B031-121804ED5D0A}
{71961A8D-B26F-46AE-A475-D00425D875A0} = {A3766414-EB5C-40F7-B031-121804ED5D0A}
{FD3AB895-2AF6-447D-82CF-DB002B491D23} = {A3766414-EB5C-40F7-B031-121804ED5D0A}
+ {2DA3C692-349E-4FC5-A559-3227088DA9D2} = {F6A3381D-978A-4CBF-BC72-862FB75CD6AF}
+ {4C022272-CC58-4538-AF25-C1F5106B428D} = {F6A3381D-978A-4CBF-BC72-862FB75CD6AF}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {ABF8089E-43D0-4010-84A7-7A9DCFE49357}