예제 #1
0
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            GraphClientConfiguration graphClientConfiguration = new GraphClientConfiguration();

            Configuration.Bind("AzureAD", graphClientConfiguration);

            services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
            .AddAzureAD(options => Configuration.Bind("AzureAd", options));

            services.Configure <OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
            {
                options.Events = new OpenIdConnectEvents
                {
                    OnTokenValidated = async ctx =>
                    {
                        var roleGroups = new Dictionary <string, string>();
                        Configuration.Bind("AuthorizationGroups", roleGroups);

                        var graphService = await GraphService.CreateOnBehalfOfUserAsync(ctx.SecurityToken.RawData, Configuration);
                        var memberGroups = await graphService.CheckMemberGroupsAsync(roleGroups.Keys);

                        var claims = memberGroups.Select(groupGuid => new Claim(ClaimTypes.Role, roleGroups[groupGuid])).ToList();
                        claims.Add(new Claim("token", ctx.SecurityToken.RawData));

                        var appIdentity = new ClaimsIdentity(claims);
                        ctx.Principal.AddIdentity(appIdentity);
                    }
                };
            });

            services.Configure <CookieAuthenticationOptions>(AzureADDefaults.CookieScheme, options => options.AccessDeniedPath = "/accessdenied");


            services.AddControllersWithViews(options =>
            {
                var policy = new AuthorizationPolicyBuilder()
                             .RequireAuthenticatedUser()
                             .Build();
                options.Filters.Add(new AuthorizeFilter(policy));
            });

            services.AddRazorPages();
            services.AddServerSideBlazor();
            services.AddSingleton <WeatherForecastService>();
            services.AddSingleton <IGraphService2>(instance =>
            {
                return(new GraphService2(graphClientConfiguration));
            });
        }
예제 #2
0
 public GraphBaseService(GraphClientConfiguration configuration, AuthorizationConfiguration authorizationConfiguration)
 {
     Configuration = configuration;
     AuthorizationConfiguration = authorizationConfiguration;
     BuildGraphClient();
 }
예제 #3
0
 public GraphService2(GraphClientConfiguration graphClientConfiguration)
 {
     _configuration = graphClientConfiguration;
 }