如何将 Azure AD 身份验证添加到现有的 .net 网站
How to add Azure AD authentication to existing .net web site
我有一个使用 ADFS 身份验证 (System.IdentityModel.dll) 的现有 .net Web 表单站点,具有不同的自定义域,每个客户一个。在 Global.asax.cs 中,我将用户重定向到他们相应的 ADFS 端点。
void WSFederationAuthenticationModule_RedirectingToIdentityProvider(object sender, RedirectingToIdentityProviderEventArgs e)
{
if (org == "customername1")
{
strWhr = "http://adfs.customername1.com/adfs/services/trust";
e.SignInRequestMessage.HomeRealm = strWhr;
}
}
现在我需要添加 Azure AD 身份验证,无法使用 Visual Studio 向导,因为已经设置了身份验证。
有什么方法可以重用我拥有的东西并将用户重定向到他们相应的 Azure AD,如将 HomeRealm 设置为 https://login.windows.net/tenatName?
我不想在 ADFS 和每个新客户 Azure AD 之间添加信任,至少从现在开始,如果可能的话,我希望同时拥有 ADFS 和 Azure AD 身份验证。
通过 VS 使用组织帐户身份验证创建的站点会在 Startup.Auth.cs 文件中进行身份验证配置,这是我必须与使用 Owin dll?
如果可能,我想同时进行 ADFS 和 Azure AD 身份验证。
Azure AD 目前的设计方式,仅当应用程序也是 运行 作为基于 Azure 云的服务时,上述组合才有效。 link 是这么说的。
"Extend Active Directory and any other on-premises directories to Azure AD to enable single sign-on for all cloud-based applications."
https://azure.microsoft.com/en-us/services/active-directory/
我假设您的应用程序是 运行 前提,这意味着您可能无法将它们混为一谈。
标准方式是通过 OWIN。参考 this.
看起来您正在使用 WS-Fed。
我想不出 WIF 不起作用的原因,但我不知道这方面的示例。
没有真正回答我的问题,因为我将创建一个新项目并复制网页内容。
我正在测试一个潜在的解决方案,看起来不太好,但它确实有效。这可能是另一种更好的方法,所以我愿意接受输入。
if (org == "customername1")
{
app.UseWsFederationAuthentication(new WsFederationAuthenticationOptions
{
Wtrealm = realm,
MetadataAddress = adfsMetadata,
});
}
else if (org == "customername2")
{
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
PostLogoutRedirectUri = postLogoutRedirectUri,
}
我所做的是根据 URL 用户登录使用 WSFederation 或 OpenId 协议。它与 OWIN 创建的 cookie 保持会话,因此到目前为止我所做的测试看起来很有希望。
要获取此代码,只需创建一个使用 ADFS 身份验证的项目和另一个使用 Azure AD 的项目,然后将缺少的 nuget 包添加到解决方案并将 StartupAuth.cs 中的代码从一个复制到另一个。
我有一个使用 ADFS 身份验证 (System.IdentityModel.dll) 的现有 .net Web 表单站点,具有不同的自定义域,每个客户一个。在 Global.asax.cs 中,我将用户重定向到他们相应的 ADFS 端点。
void WSFederationAuthenticationModule_RedirectingToIdentityProvider(object sender, RedirectingToIdentityProviderEventArgs e)
{
if (org == "customername1")
{
strWhr = "http://adfs.customername1.com/adfs/services/trust";
e.SignInRequestMessage.HomeRealm = strWhr;
}
}
现在我需要添加 Azure AD 身份验证,无法使用 Visual Studio 向导,因为已经设置了身份验证。
有什么方法可以重用我拥有的东西并将用户重定向到他们相应的 Azure AD,如将 HomeRealm 设置为 https://login.windows.net/tenatName?
我不想在 ADFS 和每个新客户 Azure AD 之间添加信任,至少从现在开始,如果可能的话,我希望同时拥有 ADFS 和 Azure AD 身份验证。
通过 VS 使用组织帐户身份验证创建的站点会在 Startup.Auth.cs 文件中进行身份验证配置,这是我必须与使用 Owin dll?
如果可能,我想同时进行 ADFS 和 Azure AD 身份验证。
Azure AD 目前的设计方式,仅当应用程序也是 运行 作为基于 Azure 云的服务时,上述组合才有效。 link 是这么说的。
"Extend Active Directory and any other on-premises directories to Azure AD to enable single sign-on for all cloud-based applications."
https://azure.microsoft.com/en-us/services/active-directory/
我假设您的应用程序是 运行 前提,这意味着您可能无法将它们混为一谈。
标准方式是通过 OWIN。参考 this.
看起来您正在使用 WS-Fed。
我想不出 WIF 不起作用的原因,但我不知道这方面的示例。
没有真正回答我的问题,因为我将创建一个新项目并复制网页内容。 我正在测试一个潜在的解决方案,看起来不太好,但它确实有效。这可能是另一种更好的方法,所以我愿意接受输入。
if (org == "customername1")
{
app.UseWsFederationAuthentication(new WsFederationAuthenticationOptions
{
Wtrealm = realm,
MetadataAddress = adfsMetadata,
});
}
else if (org == "customername2")
{
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
PostLogoutRedirectUri = postLogoutRedirectUri,
}
我所做的是根据 URL 用户登录使用 WSFederation 或 OpenId 协议。它与 OWIN 创建的 cookie 保持会话,因此到目前为止我所做的测试看起来很有希望。 要获取此代码,只需创建一个使用 ADFS 身份验证的项目和另一个使用 Azure AD 的项目,然后将缺少的 nuget 包添加到解决方案并将 StartupAuth.cs 中的代码从一个复制到另一个。