【问题标题】:Using Azure Mobile App to authenticate Nancy使用 Azure 移动应用对 Nancy 进行身份验证
【发布时间】:2017-07-24 05:28:01
【问题描述】:

我发现我可以将 Nancy 添加到我的 Azure 移动应用中。 http://www.strathweb.com/2014/02/running-owin-pipeline-new-net-azure-mobile-services/ 但如何为南希添加身份验证?这里的目标是能够让 Web 应用程序和移动应用程序使用同一台服务器。

目标:如果 Nancy 页面需要身份验证,则跳转到 ~/.auth/login/aad(例如),然后返回原始页面。

我在哪里:

  1. 创建了新的 Azure 移动应用 ASP.NET 应用程序
  2. 添加了南希
  3. 删除默认的 MobileAppConfig 并替换为

        new MobileAppConfiguration()
            .MapApiControllers()
            .AddTables(
                new MobileAppTableConfiguration()
                    .MapTableControllers()
                    .AddEntityFramework()
            )
            .AddPushNotifications()
            .MapLegacyCrossDomainController()
            .ApplyTo(config);
    
  4. 创建一个 IndexModule 并确认 Nancy 工作

    public IndexModule()
    {
        Get["/"] = _ => "Hello";
    }
    
  5. 创建一个 AdminModule,RequiresAuthentication 在安装 Nancy.Authentication.Forms 之后出现

    public AdminModule()
        : base("admin")
    {
        Get["/"] = _ =>
        {
            this.RequiresAuthentication();
            return "This is admin";
        };
    }
    
  6. 可能是错误的做法,但我有

    protected override void ConfigureRequestContainer(TinyIoCContainer container, NancyContext context)
    {
        base.ConfigureRequestContainer(container, context);
        container.Register<IUserMapper, UserMapper>();
    }
    
    protected override void RequestStartup(TinyIoCContainer container, IPipelines pipelines, NancyContext context)
    {
        base.RequestStartup(container, pipelines, context);
    
        var formsAuthConfig = new FormsAuthenticationConfiguration
        {
            RedirectUrl = "~/.auth/login/aad",
            UserMapper = container.Resolve<IUserMapper>(),
        };
    
        FormsAuthentication.Enable(pipelines, formsAuthConfig);
    }
    

这会将用户发送到正确的身份验证页面,但是当 zumo 返回时(1)返回带有令牌的回调,并且(2)提供指向“网站”的链接,即主站点,而不是 returnUrl, (3) 仍然无法正常工作。

更新。 看起来 Nancy.Forms.Authentication 是一个死胡同。我可以使用来自 Owin.Security 的UseCookieAuthentication 吗?

Update2. 我摆脱了 Nancy.Forms.Authentication。看起来当 Zumo 完成身份验证时,实际上已经设置了 owin server.user。

    protected override void ApplicationStartup(TinyIoCContainer container, IPipelines pipelines)
    {
        base.ApplicationStartup(container, pipelines);

        Csrf.Enable(pipelines);
        pipelines.BeforeRequest.AddItemToStartOfPipeline(FlowPrincipal);
    }

    private Response FlowPrincipal(NancyContext context)
    {
        var env = Get<IDictionary<string, object>>(context.Items, NancyMiddleware.RequestEnvironmentKey);
        if (env != null)
        {
            var principal = Get<IPrincipal>(env, "server.User") as ClaimsPrincipal;
            if (principal != null)
            {
                context.CurrentUser = new ClaimsPrincipalUserIdentity(principal);
            }
        }

        return null;
    }

将提供一个有效的可用用户。但是如何触发登录和重定向是另一个问题。

Update3。我能够使用 Azure 中的设置强制登录

令人惊讶的是,这也处理了重定向。不确定它如何影响 SignalR/Zumo 表,但希望它能够检查标题而不是强制登录。

【问题讨论】:

    标签: azure azure-mobile-services


    【解决方案1】:

    您引用的博客文章适用于 Azure 移动服务,而不是 Azure 移动应用。

    查看我的书的第 6 章 - http://aka.ms/zumobook。它明确向您展示了如何为各种平台处理应用服务身份验证。 Nancy 不是其中之一,但 MVC 版本应该可以帮助您。

    【讨论】:

    • 阿德里安,我尝试使用 Nancy.Authentication.Forms 但使用 zumo .auth 登录。然而,zumo 似乎并不尊重“returnUrl”,除了不太工作。
    • 很有趣 - 讨厌把你指向其他地方,但你应该将这个(最好带有一个简单的 repo 的链接)发布到 Azure 论坛:social.msdn.microsoft.com/forums/en-US/… - 这将被适当的人看到。不幸的是,没有 GitHub 存储库可以对此提出问题。
    • Adrian,我需要您在 stackoverflow.com/questions/42643203/… 上的帮助 - 当您创建注册或登录策略(使用本地帐户)时,消费者会看到“忘记密码?”体验第一页上的链接。单击此链接不会自动触发密码重置策略。相反,特定的错误代码 AADB2C90118 会返回给您的应用程序。您的应用需要处理此问题并调用特定的密码重置策略。 - 由于 zumo auth 看到错误代码不知道如何处理它。
    • 您需要与 AAD 人员或 B2C 人员打交道 - 我没有足够的经验来回答。
    • 您知道谁负责 Azure 移动应用的身份验证吗?代码被发送到 .auth/login/aad/callback 但之后消失。我认为代码不在 github 上,而是在 Azure 内部。
    猜你喜欢
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 2015-08-09
    相关资源
    最近更新 更多