asp.net-mvc – 从OWIN身份验证中间件中考虑控制器属性
|
我目前正在组建一个自定义OWIN身份验证中间件,以便重用我们的中央身份验证机制. 为了控制对页面的访问,我使用控制器上的[Authorize]和[AllowAnonymous]属性. 即使我理解OWIN中间件和属性处于页面生命周期的不同阶段,我想知道是否有办法通知中间件AllowAnonymous属性存在且无需进一步处理请求. 通常,让中间件触发身份验证过程(在我的情况下,暗示转到远程页面 – OAuth2类型的身份验证)在访问应该匿名访问的站点的入口页面时会出现问题. 有谁知道如何实现这一目标? 解决方法我知道这很老了,但我遇到了同样的问题.如果你还没有找到答案,还要帮助其他人来看:关于中间件的要记住的是,你可以在控制器获取请求之前处理请求,然后再响应.因此,您无需直接访问属性,只需查看其结果即可. 考虑以下: namespace CustomAuthApp.MVC
{
public partial class Startup
{
public void ConfigureAuth(IAppBuilder app)
{
app.Use(async (ctx,next) =>
{
if (ctx.ExtensionMethodToCheckIfAccessTokenExistsInRequestMaybeAsACookie())
{
var ident = new ClaimsIdentity("External");
ctx.Request.User = new ClaimsPrincipal(ident);
}
await next();
if (ctx.Response.StatusCode == 401)
{
var loginUri = String.Format("{0}?ReturnUrl={1}","/Account/Login",ctx.Request.Path);
ctx.Response.Redirect(loginUri);
}
}
});
}
}
我们检查是否存在来自oauth服务的访问令牌,如果存在,则在请求上设置ClaimsPrincipal(这将使其绕过[Authorized]属性).然后在await next()处理请求之后,我们可以检查响应状态并设置所需的重定向. 显然,这是一个非常简单的案例,并没有考虑角色或索赔等问题,但它应该让你顺利进行. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 使用自定义ASP.NET MVC IValueProvider,而不
- selectlist – asp.net MVC 4.0下拉列表中的选定值
- 模型 – 视图 – 控制器 – ASP.NET MVC:使用SendAsync发送
- asp.net – 循环访问复选框列表
- asp.net – 无法加载文件或程序集“System.Web.Mvc,Version
- asp.net-mvc – 在asp.net mvc中,单个项目与多个项目实现的
- 使用ASP.NET创建精灵图像
- asp.net-mvc – 在ASP.NET MVC中使用控制器和用户控件设置活
- 使用ASP.NET Web API进行OAuth Facebook身份验证
- asp.net-mvc – 如何缓存FileContentResult的性能?
- asp.net – 通过使用JQuery调用Web服务可能存在哪
- asp.net-mvc – MVC3部署依赖问题
- asp.net – Visual Studio 2010图表控件:使Y轴成
- asp.net-mvc – asp.net MVC中RavenDB中的多租户
- asp.net-mvc – Web API错误:’ObjectContent`1
- ASP.NET 1.1到4.0迁移:事件不工作
- asp.net-mvc – ASP.NET MVC 3用户验证
- asp.net-mvc – 嵌套对象的远程ViewModel验证无效
- asp.net-mvc-4 – 最小和最大字符串长度的单独错
- asp.net-mvc – asp.net mvc – 视图中的命名空间
