Return 401 而不是重定向身份服务器
Return 401 instead of redirecting identityserver
我将 ASP.NET 核心用于 api,但无法找到将身份配置为 return 401 而不是重定向到登录页面的方法。我使用 IdentityServerAuthentication 中间件。
在Startup.cs中,我给出了这些选项:
var options = new IdentityServerAuthenticationOptions
{
Authority = Configuration.GetConnectionString("Authority"),
ScopeName = "scopeName",
RequireHttpsMetadata = false,
};
app.UseIdentityServerAuthentication(options);
我找到了解决办法,
在请求中,您可以添加一个 header X-Requested-With ,其值为 XMLHttpRequest。
这将告诉身份不要重定向到登录页面。
要覆盖未经授权时重定向到身份服务器的默认行为,我们必须创建自定义授权 class 实现 System.Web.MVC.AuthorizeAttribute
。然后,在用户未经授权(但通过身份服务器登录)的情况下,我们向用户显示未经授权的页面。
protected override void HandleUnauthorizedRequest(AuthorizationContext
filterContext)
{
if (filterContext == null) {
throw new ArgumentNullException("filterContext");
}
//Intercept results where person is authenticated but still doesn't have
permissions
if (filterContext.RequestContext.HttpContext.User.Identity.IsAuthenticated)
{
filterContext.Result = new RedirectResult(ConfigSettings.KPToolsURL +
"/Error/HttpError401");
return;
}
base.HandleUnauthorizedRequest(filterContext);
}
我写了一篇关于它的博客post,我在其中进行了更详细的介绍https://spin.atomicobject.com/2018/07/09/identityserver-auth-mvc/。
我将 ASP.NET 核心用于 api,但无法找到将身份配置为 return 401 而不是重定向到登录页面的方法。我使用 IdentityServerAuthentication 中间件。
在Startup.cs中,我给出了这些选项:
var options = new IdentityServerAuthenticationOptions
{
Authority = Configuration.GetConnectionString("Authority"),
ScopeName = "scopeName",
RequireHttpsMetadata = false,
};
app.UseIdentityServerAuthentication(options);
我找到了解决办法, 在请求中,您可以添加一个 header X-Requested-With ,其值为 XMLHttpRequest。 这将告诉身份不要重定向到登录页面。
要覆盖未经授权时重定向到身份服务器的默认行为,我们必须创建自定义授权 class 实现 System.Web.MVC.AuthorizeAttribute
。然后,在用户未经授权(但通过身份服务器登录)的情况下,我们向用户显示未经授权的页面。
protected override void HandleUnauthorizedRequest(AuthorizationContext
filterContext)
{
if (filterContext == null) {
throw new ArgumentNullException("filterContext");
}
//Intercept results where person is authenticated but still doesn't have
permissions
if (filterContext.RequestContext.HttpContext.User.Identity.IsAuthenticated)
{
filterContext.Result = new RedirectResult(ConfigSettings.KPToolsURL +
"/Error/HttpError401");
return;
}
base.HandleUnauthorizedRequest(filterContext);
}
我写了一篇关于它的博客post,我在其中进行了更详细的介绍https://spin.atomicobject.com/2018/07/09/identityserver-auth-mvc/。