【发布时间】:2018-02-23 15:21:00
【问题描述】:
我已将 OpenID 身份验证添加到我的 ASP.NET Core 2.0 wep 应用:
services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie()
.AddOpenIdConnect(option =>
{
option.ClientId = Configuration["AzureAD:ClientId"];
option.Authority = String.Format(Configuration["AzureAd:AadInstance"], Configuration["AzureAd:Tenant"]);
option.SignedOutRedirectUri = Configuration["AzureAd:PostLogoutRedirectUri"];
});
如何开启自动质询,让控制器、使用 AuthorizeAttribute 的响应动作将返回 403 而不是重定向?
编辑: 我最终得到了这个:
.AddOpenIdConnect(option =>
{
...
option.Events = new OpenIdConnectEvents
{
OnRedirectToIdentityProvider = context =>
{
bool isAjaxRequest = context.HttpContext.Request.Headers["x-requested-with"] == "XMLHttpRequest";
if (isAjaxRequest)
{
context.HttpContext.Response.StatusCode = StatusCodes.Status401Unauthorized;
//context.HttpContext.Response.Headers["Location"] = ???request.RedirectUrl;
context.HandleResponse();
}
return Task.CompletedTask;
}
};
});
虽然我不想重定向 Ajax 请求(因为为什么?),但我想将重定向 url 传递给客户端。 如何获取重定向网址?
【问题讨论】:
-
StackOverflow 上已经有这个问题的解决方案:stackoverflow.com/questions/45878166/…
-
在我的情况下略有不同,因为我使用的是 OpenIdConnect 并且建议的 OnRedirectToLogin 实际上从未被命中。然而,OpenIdOptions 上有 OnRedirectToIdentityProvider
-
您是否尝试过其他线程中解决方案中的cookie身份验证选项? AFAIK 重定向始终由 cookie 身份验证执行。
-
是的,cookie认证中的事件没有命中
-
抱歉,已监督您的这部分评论。如果您为 OnRedirectToIdentityProvider 事件实现相同的逻辑会怎样?
标签: c# asp.net-core authorization openid-connect asp.net-core-2.0