【问题标题】:Guidance required diagnosing infinite loop authenticating on ios (safari and chrome) with identity server 4使用身份服务器 4 在 ios(safari 和 chrome)上诊断无限循环身份验证所需的指导
【发布时间】:2019-05-11 11:27:45
【问题描述】:

身份服务器 4(部署为 Azure 应用服务)和移动设备上的身份验证存在一个奇怪的问题。我正在使用 OpenId 连接 .NET 核心 MVC 客户端对我的身份服务器(使用 AspNetIdentity 配置)进行身份验证。这在桌面浏览器上工作得非常好,但是在 iphone 上,当我登录时,它会进入一个无限循环,在 id 服务器和客户端(使用移动 safari 或 chrome)之间来回弹跳。

如果我停止循环并中断然后导航到该站点,我就通过了身份验证,这表明 cookie 已经发出很好。

奇怪的是我有另一个系统,其设置几乎相同,但没有这种行为。由于没有错误,而且我只能在暂存环境中的移动设备上重现,我发现很难找出诊断问题的步骤,或者我应该在哪里寻找。

我不会发出大量声明或任何会使 cookie 大小膨胀的东西。

这与身份服务器 3 的问题几乎相同:

IdentityServer3 constant redirect on login only on mobile

任何关于我应该在这里寻找什么的指针都会很棒。

【问题讨论】:

  • 干杯@JoeAudette,这是一本好书,我会看看我能用这些信息做什么。非常感谢,今天这让我发疯了!
  • 成功了@JoeAudette,谢谢你的救命稻草。如果你想要堆栈溢出点,你可以把它写成答案。
  • 我已经发布了详细信息作为答案,谢谢!

标签: asp.net-core identityserver4 openid-connect


【解决方案1】:

如果使用默认配置,iOS12 Safari 中有一些更改会破坏 oidc 登录。 详见此处:https://github.com/aspnet/Security/issues/1864

如果您使用的是 ASP.NET Core Identity,您可以通过以下方式禁用保护 使用以下代码配置 cookie

services.ConfigureExternalCookie(options =>
{
    // Other options
    options.Cookie.SameSite = SameSiteMode.None;
});
services.ConfigureApplicationCookie(options =>
{
    // Other options
    options.Cookie.SameSite = SameSiteMode.None;
});

如果您使用没有 ASP.NET Core 身份的 cookie 身份验证 您可以使用以下代码关闭保护

services.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
{
    // Other options
    options.Cookie.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.None;
});

如果您使用的是外部 OIDC 提供商,则可以避免 通过将提供商使用的响应模式从 POST 更改为 GET 请求,使用以下代码。并非所有提供商都支持 这个。

.AddOpenIdConnect("myOIDProvider", options => {
    // Other options
    options.ResponseType = "code";
    options.ResponseMode = "query";
};

_请注意,在进行这些更改时,所有用户和所有浏览器的保护都会被删除。你应该确保你所做的所有行为 状态变化受到内置 CSRF 防伪机制的保护 进入 ASP.NET Core。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多