Skip to content

Instantly share code, notes, and snippets.

@hoetz
Last active October 10, 2017 06:27
Show Gist options
  • Save hoetz/cfe9180986db830573b50f6854d9bab3 to your computer and use it in GitHub Desktop.
Save hoetz/cfe9180986db830573b50f6854d9bab3 to your computer and use it in GitHub Desktop.
mvc core 2 AuthorizationHandler problem, Stackoverflow when Fail()
//Setup Authentication & Authorization
services.AddMvc();
services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
}).AddCookie()
.AddOpenIdConnect(o =>
{
o.ClientId = Configuration["AzureAD:ClientId"];
o.Authority = String.Format(Configuration["AzureAd:AadInstance"], Configuration["AzureAd:Tenant"]);
o.SignedOutRedirectUri = Configuration["AzureAd:PostLogoutRedirectUri"];
o.Events = new OpenIdConnectEvents
{
OnRemoteFailure = OnAuthenticationFailed,
};
});
services.AddAuthorization(options =>
{
options.AddPolicy("SecurityGroup",
policy => policy.Requirements.Add(new MySecurityGroupRequirement(new Guid("38df74de-de2b-48b4-8aec-d308d07f7e07"))));
});
services.AddSingleton<IAuthorizationHandler, MySecurityGroupHandler>();
//Requirement and Handler
public class MySecurityGroupRequirement:IAuthorizationRequirement
{
public Guid SecurityGroupGuid { get; set; }
public MySecurityGroupRequirement(Guid securityGroupGuid)
{
this.SecurityGroupGuid=securityGroupGuid;
}
}
public class MySecurityGroupHandler : AuthorizationHandler<MySecurityGroupRequirement>
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MySecurityGroupRequirement requirement)
{
var groupIdsFromClaims = context.User.FindAll("groups").Select(c => c.Value).ToList();
if (groupIdsFromClaims.Contains(requirement.SecurityGroupGuid.ToString()))
{
context.Succeed(requirement);
return Task.CompletedTask;
}
else
{
context.Fail();
return Task.CompletedTask; //<--- StackOverFlow here
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment