ASP.Net MVC 5 OAuth2 Facebook声明不会持续存在。为什么呢?

时间:2015-11-14 17:07:56

标签: c# asp.net asp.net-mvc owin claims

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

Startup.Auth.cs

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

身份验证直接开箱即用,但我想知道我的Homecontroller的用户属性是否有任何Facebook相关信息。它没有,我想知道为什么。我看了一下Katana / Owin的来源,Facebook提供商是如何实现的,并找到了一个可以设置自定义声明的地方:

FacebookAuthenticationHandler.cs

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

但是当我到达我的Controller并检查身份的声明属性时,Owin提供商设置的这些自定义声明都没有。当我检查 数据库(AspNetUserClaims表)我发现完全荒废了。

是否有理由不将声明持久存储到数据库? db甚至是存储这些声明的好地方(至少有一张表)?我是否必须在我的应用程序中配置任何内容才能获得索赔?或者还有另一点我可以保持声明在整个用户会话中保持活着状态吗?

1 个答案:

答案 0 :(得分:2)

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

欢迎任何有关该问题的评论。