如何将多个端点添加到 adfs
How to add multiple endpoints to adfs
我在同一个网络服务器上有很多网络应用程序 (II7):
比方说 mydomain/app1、mydomain/app2、...等等。
我正在尝试通过 OWIN 添加 ADFS 身份验证。
这是我所做的:
[assembly: OwinStartup(typeof(MyNamespace.Startup))]
namespace MyNamespace
{
public class Startup
{
private static string realm = ConfigurationManager.AppSettings["ida:Wtrealm"];
private static string adfsMetadata = ConfigurationManager.AppSettings["ida:ADFSMetadata"];
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
app.Use((context, next) =>
{
SignIn(context);
return next.Invoke();
});
app.UseStageMarker(PipelineStage.Authenticate);
}
public void ConfigureAuth(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseWsFederationAuthentication(
new WsFederationAuthenticationOptions
{
Wtrealm = realm,
MetadataAddress = adfsMetadata
});
}
public void SignIn(IOwinContext context)
{
if (context.Authentication.User == null)
{
context.Authentication.Challenge(
WsFederationAuthenticationDefaults.AuthenticationType);
}
}
}
}
当用户访问mydomain/app1时,我想让他通过ADFS进行身份验证,然后重定向到mydomain/app1。对于访问 mydomain/app2.
的用户也是如此
但我希望在 ADFS 中只添加一个依赖方信任(因为有很多应用程序并且都使用相同的声明规则)。
我尝试了不同的配置,但我不能做我想做的事:
如果 RP 端点是 mydomain/app1/,身份验证是可以的,但是所有请求(甚至来自 mydomain/app2 的请求都被重定向到 app1),显然
如果 RP 端点仅为 mydomain/,我收到 405.0 http 错误 - 重定向后不允许使用方法(我处理尾部斜线)。
有关信息,我在 Whosebug 上看到了这个问题:
URL redirection from ADFS server
但它并没有真正回答我的问题,因为我不明白句子“(...) WIF 将处理 URL_1 处的响应,然后负责将用户重定向到 URL_2" 在 Andrew Lavers 的评论中。
如何将多个端点添加到一个 RP 信任?
或者我怎样才能将用户重定向到原来的 URL ? (考虑到所有应用程序都在同一个域中)。
在此先感谢您的帮助。
您应该能够根据触发身份验证流程的应用程序设置 wreply 参数。像这样:
app.UseWsFederationAuthentication(
new WsFederationAuthenticationOptions
{
Wtrealm = realm,
MetadataAddress = adfsMetadata,
Notifications = new WsFederationAuthenticationNotifications
{
RedirectToIdentityProvider = context =>
{
context.ProtocolMessage.Wreply = <construct reply URL from context.Request>;
return Task.FromResult(0);
}
}
});
这里的问题是,即使这样做,ADFS 服务器也不需要遵守给定的 Wreply 参数。默认情况下,ADFS 总是在成功登录后重定向到 Wtrealm。
在我们的案例中,我们希望通过 ADFS 对 2 台测试服务器、1 台生产服务器进行身份验证,并为开发人员 (localhost) 启用登录。由于重定向问题,每个服务器都需要自己的依赖方信任。
此处理想的解决方案是为每个服务器单独创建 RP 信任 运行 应用程序以及 https://localhost:44300 (Visual Studio default SSL port) so that developers can also authenticate. For allowing https://localhost:44300 可能存在一些安全问题,首选选项是设置例如在 Azure VM 上开发 ADFS。
我在同一个网络服务器上有很多网络应用程序 (II7): 比方说 mydomain/app1、mydomain/app2、...等等。 我正在尝试通过 OWIN 添加 ADFS 身份验证。 这是我所做的:
[assembly: OwinStartup(typeof(MyNamespace.Startup))]
namespace MyNamespace
{
public class Startup
{
private static string realm = ConfigurationManager.AppSettings["ida:Wtrealm"];
private static string adfsMetadata = ConfigurationManager.AppSettings["ida:ADFSMetadata"];
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
app.Use((context, next) =>
{
SignIn(context);
return next.Invoke();
});
app.UseStageMarker(PipelineStage.Authenticate);
}
public void ConfigureAuth(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseWsFederationAuthentication(
new WsFederationAuthenticationOptions
{
Wtrealm = realm,
MetadataAddress = adfsMetadata
});
}
public void SignIn(IOwinContext context)
{
if (context.Authentication.User == null)
{
context.Authentication.Challenge(
WsFederationAuthenticationDefaults.AuthenticationType);
}
}
}
}
当用户访问mydomain/app1时,我想让他通过ADFS进行身份验证,然后重定向到mydomain/app1。对于访问 mydomain/app2.
的用户也是如此但我希望在 ADFS 中只添加一个依赖方信任(因为有很多应用程序并且都使用相同的声明规则)。
我尝试了不同的配置,但我不能做我想做的事:
如果 RP 端点是 mydomain/app1/,身份验证是可以的,但是所有请求(甚至来自 mydomain/app2 的请求都被重定向到 app1),显然
如果 RP 端点仅为 mydomain/,我收到 405.0 http 错误 - 重定向后不允许使用方法(我处理尾部斜线)。
有关信息,我在 Whosebug 上看到了这个问题: URL redirection from ADFS server
但它并没有真正回答我的问题,因为我不明白句子“(...) WIF 将处理 URL_1 处的响应,然后负责将用户重定向到 URL_2" 在 Andrew Lavers 的评论中。
如何将多个端点添加到一个 RP 信任? 或者我怎样才能将用户重定向到原来的 URL ? (考虑到所有应用程序都在同一个域中)。
在此先感谢您的帮助。
您应该能够根据触发身份验证流程的应用程序设置 wreply 参数。像这样:
app.UseWsFederationAuthentication(
new WsFederationAuthenticationOptions
{
Wtrealm = realm,
MetadataAddress = adfsMetadata,
Notifications = new WsFederationAuthenticationNotifications
{
RedirectToIdentityProvider = context =>
{
context.ProtocolMessage.Wreply = <construct reply URL from context.Request>;
return Task.FromResult(0);
}
}
});
这里的问题是,即使这样做,ADFS 服务器也不需要遵守给定的 Wreply 参数。默认情况下,ADFS 总是在成功登录后重定向到 Wtrealm。
在我们的案例中,我们希望通过 ADFS 对 2 台测试服务器、1 台生产服务器进行身份验证,并为开发人员 (localhost) 启用登录。由于重定向问题,每个服务器都需要自己的依赖方信任。
此处理想的解决方案是为每个服务器单独创建 RP 信任 运行 应用程序以及 https://localhost:44300 (Visual Studio default SSL port) so that developers can also authenticate. For allowing https://localhost:44300 可能存在一些安全问题,首选选项是设置例如在 Azure VM 上开发 ADFS。