我看到我可以將Nancy添加到我的Azure移動應用程序。 http://www.strathweb.com/2014/02/running-owin-pipeline-new-net-azure-mobile-services/但我怎樣才能爲Nancy添加身份驗證?這裏的目標是能夠同時使用同一臺服務器的Web應用程序和移動應用程序。使用Azure移動應用程序驗證Nancy
目標:如果Nancy頁面需要驗證,跳轉到〜/ .auth/login/aad(例如),然後返回到始發頁面。
我在哪裏:
- 建立新Azure的移動應用ASP.NET應用程序
- 新增南希
刪除默認MobileAppConfig與
new MobileAppConfiguration() .MapApiControllers() .AddTables( new MobileAppTableConfiguration() .MapTableControllers() .AddEntityFramework() ) .AddPushNotifications() .MapLegacyCrossDomainController() .ApplyTo(config);
替換創建IndexModule並確認Nancy的工作原理是
public IndexModule() { Get["/"] = _ => "Hello"; }
創建AdminModule,RequiresAuthentication自帶安裝Nancy.Authentication.Forms
public AdminModule() : base("admin") { Get["/"] = _ => { this.RequiresAuthentication(); return "This is admin"; }; }
也許是錯誤的做法後,但我有
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表,但希望它能夠檢查標題,而不是強制在這些表上登錄。
甜,謝謝阿德里安! – tofutim
Adrian,我嘗試使用Nancy.Authentication.Forms,但使用zumo.auth登錄。然而,zumo似乎並不尊重「returnUrl」,除此之外還沒有很好的工作。 – tofutim
有趣 - 討厭在別處指出您的位置,但您應該將此內容(最好帶有簡單回購的鏈接)發佈到Azure論壇:https://social.msdn.microsoft.com/forums/en-US/home?forum = windowsazurewebsitespreview&filter = alltypes&sort = lastpostdesc - 這會被相應的人看到。不幸的是,沒有一個GitHub倉庫就此提出問題。 –