使用OnValidateIdentity对cookie数据执行其他验证

时间:2015-10-20 15:36:49

标签: c# asp.net owin katana

Brock Allen's blog,他声明

  

CookieAuthenticationOptions类具有Provider属性...和   它具有您可以订阅的代理属性。这个   允许您在进入应用程序时验证cookie   (OnValidateIdentity)。在此回调中,您可以拒绝或替换   身份。

我是OWIN和C#的新手,所以我正在努力调整我在网上找到的OnValidateIdentity的许多例子以满足我的需求。在每个“私人”网页上接受cookie有效后,我想检查以下内容:

  1. Cookie至少包含一项声明
  2. CustomerId声明值大于零
  3. 我可以用普通方法实现这两个检查,但我无法弄清楚如何将登录挂钩到OnValidateIdentity。这是我到目前为止所做的:

    我已经写了一些代码,但无法弄清楚需要从使用的方法返回什么。

    public void Configuration(IAppBuilder app)
    {
        dynamic cookieExpirationPeriod = TimeSpan.FromMinutes(60);
    
        CookieAuthenticationProvider prov = new CookieAuthenticationProvider();
        prov.OnValidateIdentity = ctx =>
        {
            MyClaimsIdentityObject si = MyApp.Identity.Current();
            if (si == null || si.UserId == 0 || si.CustomerId == 0) {
                ctx.RejectIdentity();
                // what needs to happen here for a return value?
            }
        };
    
    
        CookieAuthenticationOptions coa = new CookieAuthenticationOptions {
            AuthenticationMode = AuthenticationMode.Active,
            CookieName = "MyApp",
            ExpireTimeSpan = cookieExpirationPeriod,
            SlidingExpiration = true,
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("/login.aspx"),
            CookieHttpOnly = true,
            Provider = prov
        };
    
        if (HttpContext.Current.Request.IsLocal) {
            coa.CookieSecure = CookieSecureOption.Never;
        } else {
            coa.CookieSecure = CookieSecureOption.Always;
        }
    
        app.UseCookieAuthentication(coa);
    
    }
    

1 个答案:

答案 0 :(得分:3)

我相信这只是:

return Task.FromResult<int>(0);