我看到我可以将Nancy添加到我的Azure移动应用程序中。 http://www.strathweb.com/2014/02/running-owin-pipeline-new-net-azure-mobile-services/但是如何为Nancy添加身份验证?这里的目标是能够使用同一台服务器同时拥有一个Web应用程序和一个移动应用程序。
目标:如果Nancy页面需要身份验证,请跳转到〜/ .auth / login / aad(例如),然后返回到原始页面。
我在哪里:
删除默认的MobileAppConfig并替换为
new MobileAppConfiguration()
.MapApiControllers()
.AddTables(
new MobileAppTableConfiguration()
.MapTableControllers()
.AddEntityFramework()
)
.AddPushNotifications()
.MapLegacyCrossDomainController()
.ApplyTo(config);
创建一个IndexModule并确认Nancy正常工作
public IndexModule()
{
Get["/"] = _ => "Hello";
}
创建一个AdminModule,在安装Nancy.Authentication.Forms后出现RequiresAuthentication
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是一个关于此问题的deadend。我可以使用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表,但希望它能够检查标题而不强制登录。
答案 0 :(得分:1)
您引用的博客文章适用于Azure移动服务,而非Azure移动应用程序。
查看我的书的第6章 - http://aka.ms/zumobook。它明确地向您展示了如何处理各种平台的App Service身份验证。 Nancy并不是其中之一,但MVC版本可以帮助你。