我刚刚创建了一个新的MVC应用程序来学习OAuth2。首先,我在Facebook注册为开发人员,并在我的应用程序中启用了Facebook身份提供商:
app.UseFacebookAuthentication(
appId: "something",
appSecret: "secret");
身份验证直接开箱即用,但我想知道我的Homecontroller的用户属性是否有任何Facebook相关信息。它没有,我想知道为什么。我看了一下Katana / Owin的来源,Facebook提供商是如何实现的,并找到了一个可以设置自定义声明的地方:
context.Identity.AddClaim(new Claim("urn:facebook:name", context.Name, XmlSchemaString, Options.AuthenticationType));
但是当我到达我的Controller并检查身份的声明属性时,Owin提供商设置的这些自定义声明都没有。当我检查 数据库(AspNetUserClaims表)我发现完全荒废了。
是否有理由不将声明持久存储到数据库? db甚至是存储这些声明的好地方(至少有一张表)?我是否必须在我的应用程序中配置任何内容才能获得索赔?或者还有另一点我可以保持声明在整个用户会话中保持活着状态吗?
答案 0 :(得分:2)
好吧,深入了解Owin并得出结论,身份验证提供程序是Owin中间件构造的一部分,该构造在管道中独立运行,不会直接影响应用程序主体。 AccountController中有一个名为 ExternalLoginCallback 的动作,当整个auth aria完成时会调用该动作。它获得了一个 ExternalLoginInfo 对象,该对象包含我的所有声明并构造一个充当官方应用程序用户的 ApplicationUser 。它有一个Claims属性,但是我没有自动填充来自ExternalLoginInfo的声明,我想原因是声明可能会随着每次登录而改变。所以在我的情况下,在将新内容添加到用户之前,我最好删除所有旧的旧版权声明。由于这是习惯,我必须以某种方式自己提供。由于这些数据非常不稳定,我现在将其保留在Session中。
欢迎任何有关该问题的评论。