- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
你好!
我还没有看到太多这方面的内容,因为在撰写本文时它都是非常新的。我正在尝试编写一个服务结构应用程序,在用户通过 ACS 进行身份验证后为 Web 应用程序(html/js)提供服务。我可以轻松地使其在非服务结构环境(即 IIS 后面的传统 Asp Net 应用程序)中与 OWIN 一起使用。我正在尝试将 token 身份验证与 Azure 访问控制结合使用。
那么,与我现在使用服务结构改变了 OWIN 工作方式有关吗?下面是我的 Service Fabric 应用程序 Startup.cs 中的 OWIN ConfigureApp() 函数:
public static void ConfigureApp(IAppBuilder appBuilder)
{
appBuilder.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
appBuilder.UseCookieAuthentication(new CookieAuthenticationOptions());
appBuilder.UseWsFederationAuthentication(
new WsFederationAuthenticationOptions
{
Wtrealm = _realm,
MetadataAddress = _acsXmlMetaDataUrl
});
// Configure Web API for self-host.
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
appBuilder.UseWebApi(config);
}
请注意我如何在 Web API 中间件之前注入(inject) WsFederation 中间件,该中间件最终将用于为我的浏览器 html/js 应用程序提供服务。现在,当它启动时,我会进行健全性测试,例如导航到 REST url,我的内容将立即提供,而不是重定向到 Azure 访问控制来登录并获取身份验证 token 。在具有相同 OWIN 配置的传统 Asp Net 应用程序中,我确实在提供任何资源之前重定向到 Azure 访问控制。
所以我的问题是如何将 WsFed 中间件注入(inject) OWIN 管道,以便它可以在服务结构上下文中工作?
任何帮助将不胜感激,感谢您的宝贵时间!
最佳答案
我不知道为什么这段代码适用于 MVC 而不适用于 Service Fabric。我也遇到了同样的问题,但我找到了一种方法让它适用于 SF。
This article给出了教程。
基本上,在您的代码中,您没有告诉它进行身份验证。您正在设置一切,但尚未开始。
app.Map("/login", map =>
{
map.Run(async ctx =>
{
if (ctx.Authentication.User == null ||
!ctx.Authentication.User.Identity.IsAuthenticated)
{
ctx.Response.StatusCode = 401;
}
else
{
ctx.Response.Redirect("/");
}
});
});
app.Run(async ctx =>
{
var user = ctx.Authentication.User;
var response = ctx.Response;
response.ContentType = "text/html";
if (user != null && user.Identity.IsAuthenticated)
{
await response.WriteAsync(string.Format("<h2>{0}</h2>",
user.Claims.First().Issuer));
await response.WriteAsync("<dl>");
foreach (var claim in user.Claims)
{
await response.WriteAsync(string.Format(
"<dt>{0}</dt> <dd>{1}</dd>",
claim.Type,
claim.Value));
}
await response.WriteAsync("</dl>");
}
else
{
await ctx.Response.WriteAsync("<h2>anonymous</h2>");
}
});
当您访问网站上的链接时,app.Run 中的代码开始执行以检查您是否已登录。如果您没有登录,在本例中,它将在页面上写入“匿名”而不是加载您的内容。要进行身份验证,转到您的网站/登录,它会将您重定向到您在配置中拥有的任何身份验证提供商。
结论:添加登录、注销和 app.Run 代码段,如果需要的话可以进行最后的调整,就这样了。
关于c# - Service Fabric Owin 管道中的 WsFederation 身份验证不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38902532/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!