使用 Azure 移动应用对 Nancy 进行身份验证
Using Azure Mobile App to authenticate Nancy
我发现我可以将 Nancy 添加到我的 Azure 移动应用程序中。 http://www.strathweb.com/2014/02/running-owin-pipeline-new-net-azure-mobile-services/ 但我如何为 Nancy 添加身份验证?这里的目标是能够使用同一台服务器同时拥有 Web 应用程序和移动应用程序。
目标:如果 Nancy 页面需要身份验证,则跳转到 ~/.auth/login/aad(例如),然后 return 到原始页面。
我所在的位置:
- 创建了新的 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 returns 时,它 (1) returns 到带有令牌的回调,并且 (2) 给出 link 到主站点 "website",而不是 returnUrl,并且 (3) 仍然无法正常工作。
Update. 看起来 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 表,但希望它能够检查 header 而不是强制登录这些表。
您引用的博客 post 适用于 Azure 移动服务,而非 Azure 移动应用程序。
查看我的书的第 6 章 - http://aka.ms/zumobook。它明确地向您展示了如何处理各种平台的应用服务身份验证。 Nancy 不是其中之一,但 MVC 版本应该可以帮助你。
我发现我可以将 Nancy 添加到我的 Azure 移动应用程序中。 http://www.strathweb.com/2014/02/running-owin-pipeline-new-net-azure-mobile-services/ 但我如何为 Nancy 添加身份验证?这里的目标是能够使用同一台服务器同时拥有 Web 应用程序和移动应用程序。
目标:如果 Nancy 页面需要身份验证,则跳转到 ~/.auth/login/aad(例如),然后 return 到原始页面。
我所在的位置:
- 创建了新的 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 returns 时,它 (1) returns 到带有令牌的回调,并且 (2) 给出 link 到主站点 "website",而不是 returnUrl,并且 (3) 仍然无法正常工作。
Update. 看起来 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 表,但希望它能够检查 header 而不是强制登录这些表。
您引用的博客 post 适用于 Azure 移动服务,而非 Azure 移动应用程序。
查看我的书的第 6 章 - http://aka.ms/zumobook。它明确地向您展示了如何处理各种平台的应用服务身份验证。 Nancy 不是其中之一,但 MVC 版本应该可以帮助你。