IdentityServer4和.netcore WebApp / WebAPI cookie身份验证/授权

时间:2018-11-10 14:17:59

标签: ajax web-applications asp.net-web-api2 asp.net-core-2.0 identityserver4

我有三个应用程序,即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已更改。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

这是神奇的代码行。

  

ConfigureServices

之前的方法

  

services.AddAuthentication

这是原因,因为未验证哪个Cookie。

  

services.AddDataProtection()。PersistKeysToFileSystem(PersistKeysLocation.GetKeyRingDirInfo())   .SetApplicationName(Config.ApplicationName);