【问题标题】:ASP.Net MVC 5 OAuth2 Facebook Claims are not persisted. Why?ASP.Net MVC 5 OAuth2 Facebook 声明不持久。为什么?
【发布时间】:2015-11-14 17:07:55
【问题描述】:

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

Startup.Auth.cs

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

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

FacebookAuthenticationHandler.cs

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

但是当我到达我的控制器并检查身份的声明属性时,一旦由 Owin 提供程序设置,这些自定义声明都没有。当我检查 数据库(AspNetUserClaims 表)我发现它完全被遗弃了。

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

【问题讨论】:

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


    【解决方案1】:

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

    热烈欢迎任何关于该问题的 cmets。

    【讨论】:

    • 很好奇你是如何解决这个问题的。我正在处理同样的问题。我想要的一切都在原始声明中,但它们不会延续。
    猜你喜欢
    • 1970-01-01
    • 2014-09-15
    • 2011-08-18
    • 2021-05-08
    • 2016-01-28
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多