如何将Azure AD身份验证添加到现有的.net网站

时间:2017-08-22 13:36:34

标签: c# .net azure azure-active-directory adfs

我有一个现有的.net网络表单站点使用ADFS身份验证( System.IdentityModel.dll ),具有不同的自定义域,每个客户一个。在 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一起完成的事情

3 个答案:

答案 0 :(得分:3)

标准方式是通过OWIN。请参阅this

看起来你正在使用WS-Fed。

我想不出WIF不起作用的原因,但我不知道这样的样本。

答案 1 :(得分:0)

如果可能的话,我希望同时进行ADFS和Azure AD身份验证。

现在设计Azure AD的方式,只有在应用程序也作为基于Azure云的服务运行时,上述组合才有效。这就是链接所说的内容。

"将Active Directory和任何其他本地目录扩展到Azure AD,以便为所有基于云的应用程序启用单点登录。"

https://azure.microsoft.com/en-us/services/active-directory/

我假设您的应用程序在前提下运行,这意味着您可能无法混淆它们。

答案 2 :(得分:0)

我没有真正回答我的问题,因为我将创建一个新项目并复制网页内容。 我正在测试一个潜在的解决方案,看起来不太好但是有效。这可能是另一种更好的方式,所以我愿意投入。

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 中的代码从一个复制到另一个。