ASP.Net MVC 5 OAuth2 Facebook声明未持久化.为什么?

本文关键字:持久化 为什么 声明 Facebook Net MVC OAuth2 ASP | 更新日期: 2023-09-27 18:22:04

我刚刚创建了一个新的MVC应用程序来学习OAuth2。为了开始,我注册为Facebook的开发人员,并在我的应用程序中启用了Facebook身份提供商:

Startup.Auth.cs

app.UseFacebookAuthentication(
           appId: "something",
           appSecret: "secret");

身份验证直接起作用,但我想知道我的家庭控制器的用户属性是否有任何与Facebook相关的信息。它没有,我想知道为什么。我查看了Katana/Owin的来源,了解了Facebook提供商是如何实现的,并找到了一个设置自定义声明的地方:

FacebookAuthenticationHandler.cs

context.Identity.AddClaim(new Claim("urn:facebook:name", context.Name, XmlSchemaString, Options.AuthenticationType));

但是,当我到达我的控制器并检查Identity’s Claims属性时,Owin提供商设置后就没有这些自定义声明了。当我检查数据库(AspNetUserClaims表)我发现它完全废弃了。

索赔没有持久化到数据库是有原因的吗?数据库是否是存储这些声明的好地方(至少有一个表)?我必须在我的应用程序中配置任何东西才能预先列出索赔吗?或者,在另一点上,我可以在整个用户会话中保持声明的有效性吗?

ASP.Net MVC 5 OAuth2 Facebook声明未持久化.为什么?

Allright,深入了解Owin,得出的结论是,身份验证提供程序是Owin中间件结构的一部分,该中间件结构在管道中独立运行,不会直接影响应用程序主体。AccountController中有一个名为ExternalLoginCallback的操作,该操作在整个身份验证aria完成时调用。它获得了一个ExternalLoginInfo对象,该对象包含我的所有声明,并构造了一个充当官方应用程序用户的ApplicationUser。它有一个Claims属性,但该属性不会自动填充ExternalLoginInfo中的索赔,我想原因是索赔可能会随着每次登录而更改。因此,在我的情况下,我最好在向用户添加新声明之前删除所有旧声明。由于这是一种习惯,我不得不自己提供。由于这些数据非常不稳定,我暂时将其保留在Session中。

我们热烈欢迎对这个问题的任何评论。