【发布时间】:2018-09-16 08:02:18
【问题描述】:
我的 Web 应用控制器上有一个 [Authorize] 属性,因此任何端点命中确保用户被重定向到首先登录 OAuth 服务器(如果尚未登录)。
我现在想在每次用户登录时开始向网络应用程序数据库写入用户声明。为此,我需要在每次用户成功登录/授权时在网络应用程序上运行一些代码。
我得到了一个线索,它涉及添加自定义中间件。
我的启动ConfigureServices代码目前如下:
public class Startup
{
public Startup(IConfiguration configuration, IHostingEnvironment env)
{
Configuration = configuration;
Env = env;
}
public IHostingEnvironment Env { get; }
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
// Adds a default in-memory implementation of IDistributedCache.
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
options.Cookie.HttpOnly = true;
});
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie()
.AddOpenIdConnect(options =>
{
options.SignInScheme = "Cookies";
options.Authority = Configuration["auth:oidc:authority"];
options.RequireHttpsMetadata = !Env.IsDevelopment();
options.ClientId = Configuration["auth:oidc:clientid"];
options.ClientSecret = Configuration["auth:oidc:clientsecret"];
options.ResponseType = "code id_token";
options.Scope.Add(Configuration["auth:oidc:clientid"]);
options.Scope.Add("offline_access");
options.GetClaimsFromUserInfoEndpoint = true;
options.SaveTokens = true;
});
}
... []
所以我的问题是:我需要添加什么代码,以及在哪里,才能调用包含我的自定义操作的方法?
【问题讨论】:
标签: c# asp.net-mvc asp.net-core identityserver4 asp.net-core-middleware