概要:iOS/OS 12でサードパーティのログインが中断します!
複数のウェブサイトで機能する共通のログインがあります。これはFirefox、Chrome、Windows、macOS、iOSのSafariでは正常に機能しています。しかしiOS12とmacOS12では、auth0ログインウィンドウからログインAPIへのCookieが機能しなくなったようです。
Safariだけでなく、iOS12でもChromeとFirefoxで動作しなくなりました(Mac OS12ではChrome)でも動作します)。これはIntelligentTracking Prevention 2.0と関係がありますが、私は多くの技術的な詳細を見つけるのに苦労しています。
ログインフローは次のとおりです。
私はスタートアップで以下を使用します:
services.AddAuthentication(options => {
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie(options =>
{
options.Cookie.Path = "/";
options.SlidingExpiration = false;
})
.AddOpenIdConnect("Auth0", options => {
// Set the authority to your Auth0 domain
options.Authority = $"https://{Configuration["Auth0:Domain"]}";
// Configure the Auth0 Client ID and Client Secret
options.ClientId = Configuration["Auth0:ClientId"];
options.ClientSecret = Configuration["Auth0:ClientSecret"];
// Set response type to code
options.ResponseType = "code";
// Configure the scope
options.Scope.Clear();
options.Scope.Add("openid");
options.Scope.Add("profile");
options.Scope.Add("email");
options.Scope.Add("offline_access");
options.CallbackPath = new PathString("/signin-auth0");
options.ClaimsIssuer = "Auth0";
options.SaveTokens = true;
options.Events = new OpenIdConnectEvents
{
OnRemoteFailure = context => {
<not relevant error redirects>
},
OnRedirectToIdentityProvider = context =>
{
context.ProtocolMessage.SetParameter("audience", $"{ Configuration["Auth0:ApiIdentifier"]}");
return Task.FromResult(0);
},
OnRedirectToIdentityProviderForSignOut = (context) =>
{
<not relevant logout handling>
}
};
});
ログインコントローラーには、セッション値を設定し、ChallengeAsyncを呼び出してAuth0ログインを開くログインアクションがあります。
await HttpContext.ChallengeAsync("Auth0", new AuthenticationProperties() { IsPersistent = true, ExpiresUtc = DateTime.UtcNow.AddMinutes(Global.MAX_LOGIN_DURATION_MINUTES), RedirectUri = returnUri });
「returnUri」パラメーターは、この同じコントローラーに戻るフルパスですが、アクションが異なります。このアクションが実行されると、auth0ログインからのCookie(つまり、 https://ourcompany.eu.auth0.com )とログインアクションで設定したセッションデータの両方がiOS12で失われます。
IOS 12で動作する他の方法でそれを行うことはできますか?すべての助けに感謝します。
私はついにそれを理解しました。デフォルトで設定されるCookieはSameSiteMode.Lax
を使用します。これは、iOS 12まではどこでも問題なく機能し、iOS 12ではSameSiteMode.None
に設定する必要があります。
これは私が使用する変更であり、再び機能します。
.AddCookie(options =>
{
options.Cookie.Path = "/";
options.SlidingExpiration = false;
options.Cookie.SameSite = SameSiteMode.None;
options.Cookie.Expiration = TimeSpan.FromMinutes(Global.MAX_LOGIN_DURATION_MINUTES);
})