2017-03-03 50 views
6

我看到我可以將Nancy添加到我的Azure移動應用程序。 http://www.strathweb.com/2014/02/running-owin-pipeline-new-net-azure-mobile-services/但我怎樣才能爲Nancy添加身份驗證?這裏的目標是能夠同時使用同一臺服務器的Web應用程序和移動應用程序。使用Azure移動應用程序驗證Nancy

目標:如果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中

enter image description here

令人奇怪的是,這也需要重定向的照顧。不知道它如何影響SignalR/Zumo表,但希望它能夠檢查標題,而不是強制在這些表上登錄。

回答

1

您參考的博文是針對Azure移動服務的,而不是針對Azure移動應用的。

查看我的書的第6章 - http://aka.ms/zumobook。它明確向您展示瞭如何處理各種平臺的應用服務認證。 Nancy不是其中之一,但MVC版本應該可以幫助你。

+0

甜,謝謝阿德里安! – tofutim

+0

Adrian,我嘗試使用Nancy.Authentication.Forms,但使用zumo.auth登錄。然而,zumo似乎並不尊重「returnUrl」,除此之外還沒有很好的工作。 – tofutim

+0

有趣 - 討厭在別處指出您的位置,但您應該將此內容(最好帶有簡單回購的鏈接)發佈到Azure論壇:https://social.msdn.microsoft.com/forums/en-US/home?forum = windowsazurewebsitespreview&filter = alltypes&sort = lastpostdesc - 這會被相應的人看到。不幸的是,沒有一個GitHub倉庫就此提出問題。 –

相關問題