public void ConfigureServices(IServiceCollection services)
        {
            var initialScopes = Configuration.GetValue <string>("DownstreamApi:Scopes")?.Split(' ');

            services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
            .AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"))
            .EnableTokenAcquisitionToCallDownstreamApi(initialScopes)
            .AddMicrosoftGraph(Configuration.GetSection("DownstreamApi"))
            .AddDistributedTokenCaches();
            services.AddDistributedMemoryCache();

            services.Configure <OpenIdConnectOptions>(OpenIdConnectDefaults.AuthenticationScheme, options =>
            {
                var previous = options.Events.OnRedirectToIdentityProvider;

                options.Events.OnRedirectToIdentityProvider = async context =>
                {
                    if (previous != null)
                    {
                        await previous(context);
                    }
                    FileHandlerActivationParameters fileHandlerActivation;
                    if (context.Request.IsFileHandlerActivationRequest(out fileHandlerActivation))
                    {
                        context.ProtocolMessage.LoginHint  = fileHandlerActivation.UserId;
                        context.ProtocolMessage.DomainHint = "organizations";
                        CookieStorage.Save(context.Request.Form, context.Response);
                    }

                    var challengeProperties = context.Properties;
                    if (null != challengeProperties && challengeProperties.Items.ContainsKey("prompt"))
                    {
                        context.ProtocolMessage.Prompt = challengeProperties.Items["prompt"];
                    }
                };
            });

            services.AddGlasswall(Configuration.GetSection("Glasswall"));

            services.AddControllersWithViews(options =>
            {
                var policy = new AuthorizationPolicyBuilder()
                             .RequireAuthenticatedUser()
                             .Build();
                options.Filters.Add(new AuthorizeFilter(policy));
            });
            services.AddRazorPages()
            .AddMicrosoftIdentityUI();
        }
Exemplo n.º 2
0
        private void ConfigureAuthenticationServices(IServiceCollection services)
        {
            var initialScopes = Configuration.GetValue <string>("DownstreamApi:Scopes")?.Split(' ');

            services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
            .AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"))
            .EnableTokenAcquisitionToCallDownstreamApi(initialScopes)
            .AddMicrosoftGraph(Configuration.GetSection("DownstreamApi"))
            .AddDistributedTokenCaches();
            services.AddDistributedMemoryCache();

            services.Configure <OpenIdConnectOptions>(OpenIdConnectDefaults.AuthenticationScheme, options =>
            {
                var previous = options.Events.OnRedirectToIdentityProvider;

                options.Events.OnRedirectToIdentityProvider = async context =>
                {
                    var logger = context.HttpContext.RequestServices.GetService <ILogger <Startup> >();
                    logger.LogInformation("Executing OnRedirectToIdentityProvider");
                    if (previous != null)
                    {
                        await previous(context);
                    }
                    FileHandlerActivationParameters fileHandlerActivation;
                    if (context.Request.IsFileHandlerActivationRequest(out fileHandlerActivation))
                    {
                        logger.LogInformation("IsFileHandlerActivationRequest:true");
                        logger.LogInformation("FileHandlerActivationParameters: {@ActivationParameters}", fileHandlerActivation);
                        context.ProtocolMessage.LoginHint  = fileHandlerActivation.UserId;
                        context.ProtocolMessage.DomainHint = "organizations";
                        CookieStorage.Save(context.Request.Form, context.Response);
                    }

                    var challengeProperties = context.Properties;
                    if (null != challengeProperties && challengeProperties.Items.ContainsKey("prompt"))
                    {
                        context.ProtocolMessage.Prompt = challengeProperties.Items["prompt"];
                    }
                };
            });
        }