Hi,
I am currently developing a website to enable my theatre group to be able to do things remotely but i am having some difficulties.
- I am unable to show links based on the access to groups in the AAD. here is the code i have. it just doesn't work.
- I also have had an issue when i have logged in that im getting the error "You do not have permission to view this directory or page." - https://tmtg.azurewebsites.net/signin-oidc
Home Controller
namespace TMTGWeb.Controllers { public class HomeController : Controller { [AllowAnonymous] public IActionResult Index() { return View(); } [AllowAnonymous] public IActionResult Privacy() { return View(); } [AllowAnonymous] public IActionResult About() { return View(); } [AllowAnonymous] public IActionResult Book() { return View(); } [AllowAnonymous] public IActionResult Contact() { return View(); } [AllowAnonymous] public IActionResult Events() { return View(); } [Authorize("ActiveMembers")] public IActionResult Members() { return View(); } [AllowAnonymous] public IActionResult Join() { return View(); } [AllowAnonymous] public IActionResult Pleaseconfirm() { return View(); } [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] public IActionResult Error() { return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); } } }
Layout
@using Microsoft.AspNetCore.Authorization @inject IAuthorizationService _authorizationService<!DOCTYPE html><html><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>@ViewBag.Title</title><environment include="Development"><link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" /><link href="~/css/fonts.css" rel="stylesheet" /><link href="~/css/sb-admin.css" rel="stylesheet" /><link href="~/css/font-awesome.css" rel="stylesheet" /><link rel="stylesheet" href="~/css/site.css" /><link href="~/css/datatables.min.css" rel="stylesheet" /></environment><environment exclude="Development"><link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" /><link href="~/css/fonts.css" rel="stylesheet" /><link href="~/css/sb-admin.css" rel="stylesheet" /><link href="~/css/font-awesome.css" rel="stylesheet" /><link rel="stylesheet" href="~/css/site.css" /><link href="~/css/datatables.min.css" rel="stylesheet" /></environment><environment include="Development"><script src="~/lib/jquery/dist/jquery.js"></script><script src="~/lib/bootstrap/dist/js/bootstrap.js"></script><script src="~/js/site.js" asp-append-version="true"></script><script src="~/js/datatables.min.js"></script></environment><environment exclude="Development"><script src="~/lib/jquery/dist/jquery.js"></script><script src="~/lib/bootstrap/dist/js/bootstrap.js"></script><script src="~/js/site.js" asp-append-version="true"></script><script src="~/js/datatables.min.js"></script></environment></head><body><nav class="navbar navbar-expand-lg navbar-dark bg-dark"><a class="navbar-brand" href="#">TMTG</a><button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button><div class="collapse navbar-collapse" id="navbarSupportedContent"><ul class="navbar-nav mr-auto"><li>@Html.ActionLink("Home", "Index", "Home", "", new { @class = "nav-link" })</li><li>@Html.ActionLink("About", "About", "Home", "", new { @class = "nav-link" })</li><li>@Html.ActionLink("Contact", "Contact", "Home", "", new { @class = "nav-link" })</li> @if ((await _authorizationService.AuthorizeAsync(User, "ActiveMembers")).Succeeded) {<li> @Html.ActionLink("Members", "Members", "Home", "", new { @class = "nav-link" }) </li> } @if ((await _authorizationService.AuthorizeAsync(User, "Committee")).Succeeded) {<li> @Html.ActionLink("Committee", "Members", "Home", "", new { @class = "nav-link" }) </li> } @if ((await _authorizationService.AuthorizeAsync(User, "Ticketing")).Succeeded) {<li> @Html.ActionLink("Ticketing", "Members", "Home", "", new { @class = "nav-link" }) </li> } @if ((await _authorizationService.AuthorizeAsync(User, "ProductionTeam")).Succeeded) {<li> @Html.ActionLink("ProductionTeam", "Members", "Home", "", new { @class = "nav-link" }) </li> } @if ((await _authorizationService.AuthorizeAsync(User, "Musicians")).Succeeded) {<li> @Html.ActionLink("Musicians", "Members", "Home", "", new { @class = "nav-link" }) </li> }</ul></div></body></html>
Startup
namespace TMTGWeb { public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.AddAuthentication(AzureADDefaults.AuthenticationScheme) .AddAzureAD(options => Configuration.Bind("AzureAd", options)); services.AddAuthorization(options => { options.AddPolicy("ActiveMembers", p => { p.RequireClaim("groups", "e8c32cc7-61e0-46b1-b896-7290d7e80ca1"); }); options.AddPolicy("Committee", p => { p.RequireClaim("groups", "6acf99d7-9411-45e9-95d0-84bcfa47b496"); }); options.AddPolicy("OffStageMembers", p => { p.RequireClaim("groups", "74bd0371-2951-4c0b-8d1d-ca2bc9fe13e4"); }); options.AddPolicy("Ticketing", p => { p.RequireClaim("groups", "de2dece0-6291-41cf-bd08-5b5e08faafc4"); }); options.AddPolicy("ProductionTeam", p => { p.RequireClaim("groups", "97a792a9-d3dc-48bd-b386-8a3a8fe99a19"); }); options.AddPolicy("TechnicalAdmin", p => { p.RequireClaim("groups", "efd5f835-e0bc-4324-90b1-82f95f0c0a89"); }); options.AddPolicy("Musicians", p => { p.RequireClaim("groups", "694fcfaa-ad22-494a-900b-2c7695b8d193"); }); }); services.AddMvc(options => { var policy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); options.Filters.Add(new AuthorizeFilter(policy)); }) .SetCompatibilityVersion(CompatibilityVersion.Version_2_2); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseCookiePolicy(); app.UseAuthentication(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); } } }
{"AzureAd": {"Instance": "https://login.microsoftonline.com/","Domain": "https://tmtg.azurewebsites.net","TenantId": "MY TENANT ID IS CORRECT","ClientId": "MY CLIENT ID IS CORRECT","CallbackPath": "/signin-oidc" },"Logging": {"LogLevel": {"Default": "Warning" } },"AllowedHosts": "*" }
any help would be appriciated.