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

Ste*_*eve 8 asp.net cookies middleware oauth-2.0 owin

我一直在关注OAuth 2.0授权服务器示例代码 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))
            }
        });
Run Code Online (Sandbox Code Playgroud)

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

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

Wil*_*iam 3

我不确定你的确切问题。

\n\n

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

\n\n

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

\n\n

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

\n\n
   // Enable the application to use a cookie to store information for the signed in user\n  app.UseCookieAuthentication(new CookieAuthenticationOptions\n            {   \n                //just to show bearer\n                AuthenticationType = DefaultAuthenticationTypes.ExternalBearer,\n                LoginPath = new PathString("/Account/Login"),\n             }\n
Run Code Online (Sandbox Code Playgroud)\n\n

布罗克·艾伦先生本人对主动与被动进行了很好的解释。

\n\n

主动与被动身份验证中间件

\n\n

出现一个问题\xe2\x80\x94 如果新模板配置了多个OWIN认证中间件,那么到底使用哪一个呢?嗯,OWIN 身份验证中间件有被动与主动的概念。活动中间件始终查看每个传入请求并尝试对调用进行身份验证,如果成功,它们会创建代表当前用户的主体,并将该主体分配给托管环境。另一方面,被动中间件仅在需要时检查请求。对于 Visual Studio 2013 中的默认模板,默认情况下配置的所有中间件都是被动的,除了 \xe2\x80\x9cmain\xe2\x80\x9d cookie 身份验证中间件(事实证明有两个 cookie 中间件可以获取在某些模板中使用 \xe2\x80\x94 主要的一个和另一个用于外部身份提供者的模板,另一个被标记为被动)。

\n