asp.net – 触发OWIN cookie中间件设置为被动身份验证模式的正确方法是什么?

我一直在关注OAuth 2.0 Authorization Server示例代码
http://www.asp.net/aspnet/overview/owin-and-katana/owin-oauth-20-authorization-server

以及查看mugget包Microsoft.aspnet.identity.samples包
(install-package Microsoft.aspnet.identity.samples -Pre)

我正试图了解被动与活动cookie中间件的工作原理.

在授权服务器示例中,“应用程序”cookie设置为被动.
在Identity示例中,“ApplicationCookie”处于活动状态.

当我阅读有关此属性内容时,它解释了只有在匹配的AuthenticationType请求时才会触发被动中间件.

如果我编辑Microsoft.aspnet.identity.samples中的startup.auth.cs文件并将应用程序cookie设置为被动,然后登录,它似乎验证,但不会登录.

深入挖掘代码,我看到帐户控制器归结为对SignInHelper.SignInAsync的调用

方法获得用户的声明权限,即调用:CreateIdentityAsync(user,DefaultAuthenticationTypes.ApplicationCookie)

我显然不理解某些东西,因为根据我的阅读并且可以说,cookie具有与Claim相同的AuthenticationType,但是当调用Authentication.SignIn时,Cookie似乎没有设置并且我返回到主页面,包含注册登录选项.

要复制该问题,请启动一个新的项目空asp.net应用程序,然后安装Identity示例包,然后将startup.auth.cs的app.useCookieAuthentication更改为:

app.UseCookieAuthentication(new CookieAuthenticationoptions {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Passive,LoginPath = new PathString("/Account/Login"),Provider = new CookieAuthenticationProvider {
                // Enables the application to validate the security stamp when the user logs in.
                // This is a security feature which is used when you change a password or add an external login to your account.  
                OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager,ApplicationUser>(
                    validateInterval: TimeSpan.FromMinutes(30),regenerateIdentity: (manager,user) => user.GenerateUserIdentityAsync(manager))
            }
        });

我尝试在startup.auth.cs中更改cookie名称,并将“自定义名称添加生成声明无效的代码中.

我将继续研究,但我认为我会在此期间与社区联系.

解决方法

我不确定你有什么确切的问题.

OWIN是一个运行所有注册的中间件模块的管道.您可以注册多种身份验证类型的中间件.

cookie解密到身份.如果将身份验证类型更改为外部承载,则它将成为cookie中的承载令牌.

我不确定为什么它不适合你,这就是我用的. (我没有看过模板的外部登录)

// Enable the application to use a cookie to store information for the signed in user
  app.UseCookieAuthentication(new CookieAuthenticationoptions
            {   
                //just to show bearer
                AuthenticationType = DefaultAuthenticationTypes.ExternalBearer,}

Good explanation of active vs. passive,from Mr. Brock Allen himself.

主动与被动认证中间件

出现一个问题 – 如果新模板配置了多个OWIN认证中间件,那么真正使用哪一个?那么,OWIN认证中间件具有被动与主动的概念.活动中间件始终查看每个传入请求并尝试对呼叫进行身份验证,如果成功,则会创建代表当前用户的主体并将该主体分配给托管环境.另一方面,被动中间件仅在被要求时检查请求.对于Visual Studio 2013中的认模板,认情况下配置的所有中间件都是被动的,除了“主”cookie身份验证中间件(原来有两个cookie中间件在一些模板中使用 – 主要的一个和另一个用于外部身份提供者,另一个标记为被动).

相关文章

这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...
最近用到了CalendarExtender,结果不知道为什么发生了错位,...
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence cha...