E. *_*aep 5 authentication asp.net-mvc middleware owin
我目前正在组建一个自定义OWIN身份验证中间件,以便重用我们的中央身份验证机制.
为了控制对页面的访问,我使用控制器上的[Authorize]和[AllowAnonymous]属性.
即使我理解OWIN中间件和属性处于页面生命周期的不同阶段,我想知道是否有办法通知中间件AllowAnonymous属性存在且不需要进一步处理请求.
通常,让中间件触发身份验证过程(在我的情况下,暗示转到远程页面 - OAuth2类型的身份验证)在访问应该匿名访问的站点的入口页面时会出现问题.
有谁知道如何实现这一目标?
小智 3
我知道这确实很旧,但我也遇到了同样的问题。如果您还没有找到答案,也可以帮助其他来寻找答案的人:
关于中间件要记住的一点是,您可以在控制器获取请求之前处理请求,并在之后处理响应。因此,您不需要直接访问属性,只需查找它们的结果。
考虑以下:
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);
}
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
我们检查 oauth 服务中的访问令牌是否存在,如果存在,则在请求上设置 ClaimsPrincipal (这将使其绕过该[Authorized]属性)。然后,在处理请求后,await next()我们可以检查响应状态并设置所需的重定向。
显然,这是一个非常简单的案例,没有考虑角色或声明等因素,但它应该可以帮助您走上正轨。
| 归档时间: |
|
| 查看次数: |
1346 次 |
| 最近记录: |