【发布时间】: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(例如),然后返回原始页面。
我在哪里:
- 创建了新的 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 表,但希望它能够检查标题而不是强制登录。
【问题讨论】:
标签: azure azure-mobile-services