125 lines
4.4 KiB
C#
125 lines
4.4 KiB
C#
// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.
|
|
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
|
|
|
|
|
|
using IdentityServer4;
|
|
using Microsoft.AspNetCore.Builder;
|
|
using Microsoft.AspNetCore.Hosting;
|
|
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Hosting;
|
|
using IRaCIS.Core.IdentityServer4.Account;
|
|
using IdentityServer4.Configuration;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using IRaCIS.Core.Infra.EFCore;
|
|
using IdentityServer4.Services;
|
|
using ReturnUrlParser = IRaCIS.Core.IdentityServer4.Account.ReturnUrlParser;
|
|
using Microsoft.AspNetCore.Http;
|
|
|
|
namespace IRaCIS.Core.IdentityServer4
|
|
{
|
|
public class Startup
|
|
{
|
|
public IWebHostEnvironment Environment { get; }
|
|
public IConfiguration Configuration { get; }
|
|
|
|
public Startup(IWebHostEnvironment environment, IConfiguration configuration)
|
|
{
|
|
Environment = environment;
|
|
Configuration = configuration;
|
|
}
|
|
|
|
public void ConfigureServices(IServiceCollection services)
|
|
{
|
|
services.AddControllers();
|
|
|
|
services.AddSameSiteCookiePolicy();
|
|
|
|
services.AddDbContext<IRaCISDBContext>(options =>
|
|
{
|
|
options.UseSqlServer(Configuration.GetSection("ConnectionStrings:RemoteNew").Value,
|
|
contextOptionsBuilder => contextOptionsBuilder.EnableRetryOnFailure());
|
|
|
|
options.EnableSensitiveDataLogging();
|
|
|
|
|
|
|
|
}, ServiceLifetime.Scoped);
|
|
|
|
services.AddTransient<IReturnUrlParser, ReturnUrlParser>();
|
|
|
|
services.AddScoped(typeof(IRepository<>), typeof(Repository<>));
|
|
|
|
services.AddCors(options =>
|
|
{
|
|
options.AddPolicy("Limit", policy =>
|
|
{
|
|
policy
|
|
.SetIsOriginAllowed(_ => true)
|
|
.AllowAnyHeader()
|
|
.AllowAnyMethod()
|
|
.AllowCredentials();
|
|
});
|
|
});
|
|
|
|
var builder = services.AddIdentityServer(options =>
|
|
{
|
|
//options.Cors.CorsPaths.Add(new PathString("/connect/authorize"));
|
|
//options.Cors.CorsPaths.Add(new PathString("/connect/authorize/callback"));
|
|
//options.Cors.CorsPaths.Add(new PathString("/user/login"));
|
|
//options.Cors.CorsPaths.Add(new PathString("/user/logout"));
|
|
|
|
options.Events.RaiseErrorEvents = true;
|
|
options.Events.RaiseInformationEvents = true;
|
|
options.Events.RaiseFailureEvents = true;
|
|
options.Events.RaiseSuccessEvents = true;
|
|
|
|
// see https://identityserver4.readthedocs.io/en/latest/topics/resources.html
|
|
options.EmitStaticAudienceClaim = true;
|
|
|
|
options.UserInteraction = new UserInteractionOptions
|
|
{
|
|
//LoginUrl = "http://localhost:8082",
|
|
//LogoutUrl = "http://localhost:8082"
|
|
|
|
LoginUrl = "http://localhost:8082/index.html",
|
|
ErrorUrl = "http://localhost:8082/error.html",
|
|
LogoutUrl = "http://localhost:8082/logout.html",
|
|
//LoginUrl = "/user/login",
|
|
// LogoutUrl = "/user/logout"
|
|
};
|
|
});
|
|
//.AddProfileService<AdminProfileService>()
|
|
//.AddResourceOwnerValidator<AdminResourceOwnerPasswordValidator>();
|
|
|
|
// in-memory, code config
|
|
builder.AddInMemoryIdentityResources(Config.IdentityResources);
|
|
builder.AddInMemoryApiScopes(Config.ApiScopes);
|
|
builder.AddInMemoryClients(Config.Clients);
|
|
|
|
// not recommended for production - you need to store your key material somewhere secure
|
|
builder.AddDeveloperSigningCredential();
|
|
|
|
}
|
|
|
|
public void Configure(IApplicationBuilder app)
|
|
{
|
|
if (Environment.IsDevelopment())
|
|
{
|
|
app.UseDeveloperExceptionPage();
|
|
}
|
|
app.UseCors("Limit");
|
|
app.UseCookiePolicy();
|
|
app.UseStaticFiles();
|
|
|
|
app.UseRouting();
|
|
app.UseIdentityServer();
|
|
app.UseAuthorization();
|
|
|
|
app.UseEndpoints(endpoints =>
|
|
{
|
|
endpoints.MapControllers();
|
|
});
|
|
}
|
|
}
|
|
} |