我有三个应用程序,即IdentityServer4 App,.Net Core2.0 WebApp,.NetCore2.0 WebAPI)
如果我打开了未经验证的Web应用程序,它将被导航到我提供凭据的身份服务器。身份验证成功后,它将导航到具有所需cookie的webapp。到这里为止一切都很好。
现在在webapp中,我正在调用webapi(通过webapp中的身份服务器设置cookie),但每次它返回为未经授权的401。
webapp中的代码示例:
services.AddAuthentication(options => { options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme; }) .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, o => { o.Cookie.Name = Config.CookieName; o.Cookie.SameSite = SameSiteMode.None; }) .AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options => { options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.Authority = Config.IdentityUrl; options.RequireHttpsMetadata = false; options.ClientId = Config.ClientId; options.SaveTokens = true; });
在WebAPI中用于配置服务方法ConfigureServices的代码示例:
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, o => {
o.Cookie.Name = Config.CookieName;
o.Cookie.SameSite = SameSiteMode.None;
o.Events = new CookieAuthenticationEvents()
{
OnRedirectToLogin = redirectContext =>
{
redirectContext.HttpContext.Response.StatusCode = StatusCodes.Status401Unauthorized;
return Task.CompletedTask;
}
};
})
.AddIdentityServerAuthentication(options =>
{
options.Authority = Config.IdentityUrl;
options.RequireHttpsMetadata = false;
options.ApiName = Config.ApiName;
});
在app.UseAuthentication()
方法中我也有Configure
方法
我对它的感觉与session-id有关。如果是这样,请提供帮助,否则请提供帮助。
我跟踪的日志显示其中仅显示以下内容:
Cookie未通过身份验证。失败消息:取消保护票证失败。
身份验证Cookie已更改。
任何帮助将不胜感激。
答案 0 :(得分:0)
这是神奇的代码行。
ConfigureServices
之前的方法
services.AddAuthentication
这是原因,因为未验证哪个Cookie。
services.AddDataProtection()。PersistKeysToFileSystem(PersistKeysLocation.GetKeyRingDirInfo()) .SetApplicationName(Config.ApplicationName);