【问题标题】:How do I manage my authentication with WorldDomination and Nancy?如何管理我的 WorldDomination 和 Nancy 身份验证?
【发布时间】:2013-08-05 12:54:04
【问题描述】:

我正在尝试使用 WorldDomination SimpleAuthentication plugin for Nancy 在 asp.net 托管的 Nancy Web 应用程序中进行社交身份验证。 TL;DR 跳到问题底部加粗的问题。

两者都很好,但是在身份验证过程(很好地涵盖)和在请求期间识别经过身份验证的用户之间存在很大的文档差距,而不是初始身份验证请求(什么都没有)。

Nancy 通过附加包提供基本和表单身份验证,它们提供的挂钩非常简单。 WorldDomination 在实际身份验证过程之后没有提供太多信息。对于每次用户访问服务器时都必须发生的正常“谁是发出此请求的用户”过程,似乎明显缺乏快乐路径。

我已经花费了相当多的时间来弄清楚这部分,但我的研究并没有让我找到任何明显的解决方案。 WD 演示应用程序没有身份验证请求以外的请求代码,并且代码库似乎不包含任何处理正常请求周期的内容。

我最好的猜测是我需要与表单身份验证集成,实现 Nancy 的表单身份验证钩子,并使用我从 WD 获得的信息来填充我自己的类型。

这似乎并不是最幸福的道路。事实上,它似乎更像是一条“做很多工作你这个懒惰的混蛋”的道路。

将 WorldDomination 的社交 OAuth 身份验证提供程序和 Nancy 集成的推荐的最佳途径是什么?我将重点关注标准的“谁是请求我的人”页面生命周期部分。 .

奖励积分(来自我将为此目的创建的大量 sockpuppet 帐户)关于这条快乐路径如何处理用户注销!

【问题讨论】:

  • @Phil, simple-authentication 将使一个可怕的通用标签名称受到无能者的滥用。我们能想出另一个名字吗?不幸的是,通过在其前面加上 nancy 来澄清它,使得它太长而无法制作可接受的标签......
  • @Charles - :( 这是我图书馆的名字。我们称之为 WorldDomination.Web.Authentication 但有太多抱怨说它不是“企业”,他们不能在工作中使用它.
  • @Phill:称之为Simple-Social。有一个很好的戒指。在上面贴上“Authentico”以获得一些风味,然后注册 .io 域。即时风险投资。
  • 还有@Will 你是否会转而使用Nancy.SimpleAuthentication(因为它已经取代了WD.Web.Auth 等。
  • @Pure.Krome:还没有,但我还没有真正在这件事上落下锤子。我会第一件事,谢谢。

标签: oauth forms-authentication nancy simple-authentication


【解决方案1】:

使用简单身份验证,我们只需以简单的方式处理与提供者的身份验证。每个提供者都有略微不同的实现、不同的命名、不同的承诺,因此我们可以将所有这些整合到简单身份验证中,让开发人员更容易在他们的网站中实现。

这就是 Nancy.SimpleAuthentication 包存在的原因。因为我们知道 Nancy 的工作原理,所以我们通过创建模块来简化与 Nancy 的集成,以便您处理重定向、身份验证回调等。

问题是,我们根本不知道您如何针对您的网站验证用户身份

我们可以自己处理整个表单身份验证场景,而且我实际上计划在未来这样做。 (必须首先实施索赔,我已经完成了 60%),但它仍然至少需要您实施 IAuthenticationCallbackProvider

public class Test : IAuthenticationCallbackProvider
{
    public dynamic Process(
        NancyModule nancyModule, 
        AuthenticateCallbackData model)
    {
        //Query for the database user based on the Provider / Id
        //Authenticate the user
        //Call LoginWithoutRedirect, and redirect how you want...
        //  or LoginWithRedirect

        return nancyModule.Negotiate.WithView("AuthenticateCallback")
            .WithModel(model);
    }
}

这个类是必需的,以便您根据您的数据库对用户进行身份验证。

我们想到的是 95% 的时间用户进行身份验证,很可能已经有某种形式的身份验证。通常形成身份验证。


所以假设你已经引入了 SimpleAuthentication,并连接了你的 IAuthenticationCallbackProvider 类。您真正需要做的就是实现 Forms Auth 的东西,这几乎是 1 个类和一个方法调用。

在提供程序中,您需要调用LoginWithoutRedirect 方法,以便 Nancy 可以创建身份验证 cookie。

然后您需要设置IUserMapper 类来告诉南希如何从数据库中获取用户。如果您使用的是 RavenDB,这将类似于:

public class DatabaseUser : IUserMapper
{
    public IDocumentStore DocumentStore { get; set; }
    public DatabaseUser(IDocumentStore documentStore)
    {
        DocumentStore = documentStore;
    }

    public IUserIdentity GetUserFromIdentifier(
        Guid identifier, 
        NancyContext context)
    {
        using (var session = DocumentStore.OpenSession())
        {
            var member = session.Query<Member>()
                .SingleOrDefault(x => x.Identifier == identifier);

            if (member == null)
                return null;

            return new UserIdentity
            {
                UserName = member.DisplayName,
                Claims = new []
                {
                    "NewUser",
                    "CanComment"
                }
            };
        }
    }
}

在引导程序中配置如下:

protected override void ConfigureRequestContainer(
    TinyIoCContainer container,
    NancyContext context)
{
    base.ConfigureRequestContainer(container, context);
    container.Register<IUserMapper, DatabaseUser>();
}
protected override void RequestStartup(
    TinyIoCContainer container, 
    IPipelines pipelines, 
    NancyContext context)
{
    base.RequestStartup(container, pipelines, context);

    var formsAuthConfiguration = new FormsAuthenticationConfiguration
    {
        RedirectUrl = "~/login",
        UserMapper = container.Resolve<IUserMapper>(),
    };

    FormsAuthentication.Enable(pipelines, formsAuthConfiguration);
}

原来如此……

我个人认为不需要编写很多代码。 Nancy 和 Simple Authentication 都为您完成了大部分工作:)

我希望通过消除对表单身份验证的需求,我们可以在未来使 SimpleAuthentication 更加容易,但现在我认为我们有一个很好的解决方案。

有用的链接:

http://www.philliphaydon.com/2012/12/18/forms-authentication-with-nancyfx/

http://www.philliphaydon.com/2013/01/31/oauth-with-nancyfx-and-world-domination-authentication/

World Domination 的第二个链接,虽然有一些重命名,但基本相同。我确实计划在我们完成声明后更新博客文章并修改 wiki。

希望对你有帮助。

编辑:

  • 我已经记下要创建一个更端到端的解决方案演示项目。

【讨论】:

  • 哇,brb,创造成群的袜子。万分感谢。这几乎可以回答它。
  • 我是简单的身份验证手动设置,因为我有不同的回调 URL 用于注册和登录。但是我遇到了同样的问题,当我使用Nancy.Authentication.Forms 时,使用 google 进行身份验证会引发异常。我已经问过这个问题stackoverflow.com/questions/35553969/…。请帮忙
猜你喜欢
  • 2011-12-30
  • 1970-01-01
  • 2012-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多