gpt4 book ai didi

c# - ADFS 联合身份验证不返回 token 并且不保存 cookie

转载 作者:行者123 更新时间:2023-11-30 17:29:29 29 4
gpt4 key购买 nike

我们对 ADFS 服务器使用 WsFederation 身份验证。我们编写的大多数应用程序都使用下面的代码(当然不包括调试代码),但我的应用程序就是不想工作。

我很好地重定向到 AD 服务器上的登录页面,可以毫无问题地输入用户 ID 和密码,但返回时应该保存一个 cookie,但实际上没有。结果是在下一次往返时重定向再次发生(虽然这次没有登录表单)。

调试代码只命中 RedirectToIdentityProvider。其他的都没有被调用。

代码在 OWIN 的 Startup.cs 中。

private static void ConfigureAuth(IAppBuilder app, ISettings settings)
{
app.SetDefaultSignInAsAuthenticationType(WsFederationAuthenticationDefaults.AuthenticationType);

// Work-around to fix Katana issue 197: https://katanaproject.codeplex.com/workitem/197
// https://github.com/KentorIT/owin-cookie-saver
app.UseKentorOwinCookieSaver();
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = WsFederationAuthenticationDefaults.AuthenticationType
});

app.UseWsFederationAuthentication(new WsFederationAuthenticationOptions
{
Wtrealm = settings.WsFedRealm,
MetadataAddress = settings.WsFedMetadataUrl,
TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = ClaimsExtensions.WurNameIdentifier,
SaveSigninToken = true,
// ValidIssuer = settings.ValidIssuer
},
Notifications = new WsFederationAuthenticationNotifications
{
MessageReceived = context =>
{
Log.Info($"Message received {context.ProtocolMessage}");
return Task.FromResult(0);
},
RedirectToIdentityProvider = context =>
{
Log.Info($"Redirect to identity provider {context?.Request?.Uri?.AbsolutePath}");
return Task.FromResult(0);
},
SecurityTokenValidated = context =>
{
Log.Info("Security token validated");
return Task.FromResult(0);
},
SecurityTokenReceived = context =>
{
Log.Info($"SecurityTokenReceived {context?.Response?.ReasonPhrase}");
return Task.FromResult(0);
},
AuthenticationFailed = context =>
{
Log.Error($"Authentication failed Uri:{context.Request?.Uri} User:{context.Request?.User?.Identity?.Name}");
context.HandleResponse();
context.Response.Redirect("~/Error?message=" + context.Exception.Message);
return Task.FromResult(0);
}
}
});

app.SetDefaultSignInAsAuthenticationType(WsFederationAuthenticationDefaults.AuthenticationType);
AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.Name;
}

最佳答案

我认为,问题是,两个中间件都激活了 AuthenticationMode

我推荐一个自定义 Controller 。如果用户访问此 Controller ,您必须为 WsFederationAuthenticationDefaults.AuthenticationType 手动触发 OwinContext.Authentication 上的身份验证并返回 401。这应该触发 WsFederationAuthenticationHandler 中的 ApplyResponseChallengeAsync

在 WsFederationAuthenticationOptions.Notifications 的 SecurityTokenValidated 方法中,您可以使用 CookieAuthenticationDefaults.AuthenticationType 类型的身份颁发新的 AuthTicket。

现在来自身份提供者的身份通过 cookieauth 转换为本地身份。

关于c# - ADFS 联合身份验证不返回 token 并且不保存 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51046484/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com