- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试设置一个使用 OIDC 连接到我公司的 SSO 门户 (OpenAM) 的 ASP.net Core 3 MVC 应用程序。
我使用 Visual Studio 2019 项目生成器创建了一个没有身份验证的基本应用程序,然后我按照 http://docs.identityserver.io/en/latest/quickstarts/2_interactive_aspnetcore.html#creating-an-mvc-client 中的步骤添加了 OIDC 客户端功能。 .只需对 Startup 类进行最少的更改,登录就可以很好地工作:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
// Setup Identity Server client
JwtSecurityTokenHandler.DefaultMapInboundClaims = false;
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
{
options.Authority = "https://mycompany.com/ssoservice/oauth2";
options.RequireHttpsMetadata = false;
options.ClientId = "openIdClient";
options.ClientSecret = "secret";
options.ResponseType = "code";
options.ProtocolValidator.RequireNonce = false;
options.SaveTokens = true;
});
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
IdentityModelEventSource.ShowPII = true;
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
// endpoints.MapDefaultControllerRoute();
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
我还设置了一个注销 Controller 操作:
[Authorize]
public IActionResult Logout()
{
return SignOut("Cookies", "oidc");
}
该操作实际上有效,即当激活时,cookie 被删除并且用户从 SSO 门户注销,但是当浏览器重定向到/signout-callback-oidc 端点时,它收到一个没有任何内容的 HTTP 200 响应。我希望它自动重定向到站点主页“/”,这是 OpenIdConnectOptions.SignedOutRedirectUri 属性的默认值。
我错过了什么?
最佳答案
好吧,经过更多时间的摆弄,我发现这是在最新的社区 OpenAM 版本中缺少实现草案的结果(在当前的付费 ForgeRock AM 中也是如此,但他们正在努力:https://bugster.forgerock.org/jira/browse/OPENAM-13831) .基本上,/signout-callback-oidc
的 .net 核心处理程序依赖于提供 state
参数以便重定向,就像评论中提到的 Ruard van Elburg:
OpenAM 不会发回 state
参数,正如我的日志中所报告的那样。因此,我们需要自己执行重定向 - 最直接的方法似乎是使用 OnSignedOutCallbackRedirect
事件:
Startup.cs
services.AddAuthentication(...)
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
{
...
options.Events.OnSignedOutCallbackRedirect += context =>
{
context.Response.Redirect(context.Options.SignedOutRedirectUri);
context.HandleResponse();
return Task.CompletedTask;
};
...
});
感谢所有回复讨论的用户,你们的贡献让我找到了正确解决方案的线索。
关于asp.net-core-mvc - SignOut 不会重定向到站点主页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58893364/
我使用了单点登录演示:http://www.codeproject.com/KB/aspnet/SingleSignon.aspx 我为这个演示添加了SignOut功能,但发现了一个问题: 当我设置
什么是更详细的工作流程差异 GoogleSignInApi.signOut FirebaseAuth.signOut() GoogleSignInApi.revokeAccess. 浏览许多教程和代码
我有主页,其中有登录和注销栏。我有用户页面,其中还有一个注册表单。现在,如果我注销,它可以正常工作,但是一旦我刷新页面,它就可以正常工作,因为用户仍然没有注销。谁能帮我解决我的问题。 用户页面的 HT
firebase.initializeApp({ apiKey: 'AIza…', authDomain: '.firebasepp.com' }); // As httpOnly cooki
我正在使用目前处于 Beta 阶段的 Cognito 用户池来处理我网站上的用户帐户。 在 javascript 中我有一行: cognitoUser.signOut(); 应该将我的用户注销,我认为
在 ASP.NET MVC3 Controller 操作中,我想注销用户并返回 401 状态代码。代码很简单: public ActionResult Index() { FormsAuthenti
我正在开发一个带有安全部分的网站,即名为“PIP”的文件夹。 登录部分工作正常,但当我点击注销时,用户仍然是已知的,如果他/她接触安全部分,则不会被重定向到登录页面。 这是我的 web.config:
我正在使用 Sign-in with Google 方法在我的应用中登录用户。 问题 - 更新 : 如果我卸载应用程序(在退出后或未退出)并重新安装应用程序,FirebaseAuth.getInsta
我看到了一些与此主题相关的帖子,但给定的解决方案并没有真正为我澄清事情...... 所以,我正在开发一个 rails(版本 3.2.2)应用程序,它遵循 Michael Hartl 的 Ruby on
下面是我用来登录谷歌的代码。我在 login.php 上有一个 ID 为授权按钮的元素。当点击它登录就好了。 我的头文件中有一个注销链接。当我单击注销时,它会调用 gapi.auth.signOut(
把我的头砸得太久了。如何防止用户在使用 FormsAuthentication.SignOut 注销后浏览网站页面?我希望这样做: FormsAuthentication.SignOut(); Ses
我正在使用Firebase身份验证登出方法,但似乎无法正常工作。当我单击注销按钮时,应该注销当前用户。但是,执行此操作后,控制台不会指示firebase auth注销方法实际上正在工作,没有提示! 该
此问题似乎与 this 有关帖子,但我无法从线程中推断出解决方案。 我在继承的应用程序中注意到了这段代码(在日志文件中注意到异常被吃掉之后): protected void Session_E
在运行我的单元测试方法时,出现错误 FormsAuthentication.SignOut()。我已经像这样 mock 了 httpcontext var httpRequest = new Http
在我的 Web 应用程序中,我使用完全自定义的登录功能。因此,Web.Security 中没有任何内容。 我使用 Session 和 ViewState 变量控制一切。要从应用程序注销,我使用 Ses
我正在为一个应用程序进行注册 Activity ,但发生了一些奇怪的事情,你能帮帮我吗? 这是用于注册的代码,如果我评论 signOut 函数它会起作用,但我需要它在将数据保存在 FirebaseAu
我尝试从 firebase 中注销用户,但在我关闭我的应用程序并再次打开后,用户仍处于连接状态 我尝试从 firebase 中定期注销用户,但没有解决问题。我想知道是什么导致了这个问题 logout
有没有人帮我解决这个问题,在我的 asp.net 应用程序中,我正在使用 FormsAuthentication.SignOut();注销应用程序的方法,但我有一个奇怪的要求,我必须使用 Javasc
我在外部身份验证服务器中使用 OWIN 中间件,我的应用程序使用 OAuth 授权代码授予流程对其进行身份验证。 我可以重定向到身份验证服务器,针对外部提供商 (Google) 进行身份验证,然后使用
我正在尝试设置一个使用 OIDC 连接到我公司的 SSO 门户 (OpenAM) 的 ASP.net Core 3 MVC 应用程序。 我使用 Visual Studio 2019 项目生成器创建了一
我是一名优秀的程序员,十分优秀!