【问题标题】:Azure AD and ASP.NET Identity + OWIN, which approach to use?Azure AD 和 ASP.NET Identity + OWIN,使用哪种方法?
【发布时间】:2016-02-10 22:55:50
【问题描述】:

我们有 ASP.NET 应用程序,该应用程序已经投入生产了 4-5 年。现在我尝试使用 Azure AD、ASP.NET Identity 和 OWIN 框架实现新的身份验证。我们的应用程序用户还需要访问已经支持使用 Azure 的 SSO 的云应用程序“BOX”。所以想法是将我们的应用程序添加到 Azure AD 并配置 SSO。

注意:我们没有本地 Active Directory,我只想使用 Azure AD 进行 Web 应用程序身份验证。

和往常一样,在浏览了 MSDN 上的大量文档后,我很困惑应该使用哪种身份验证机制。

第一种方法 - 基于 Microsoft 文章 here
我已经使用 Nuget 配置了以下包

    PM> Install-Package Microsoft.Owin.Security.OpenIdConnect  
    PM> Install-Package Microsoft.Owin.Security.Cookies  
    PM> Install-Package Microsoft.Owin.Host.SystemWeb  

然后我在 Azure AD 中配置了应用程序,然后在 ASP.Net 应用程序中配置 'ida:ClientId''ida:Tenant'' ida:PostLogoutRedirectUri' 在应用设置中。然后你在启动时调用下面的代码(还按照文章做一些额外的步骤)

public void ConfigureAuth(IAppBuilder app)
{
    app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

    app.UseCookieAuthentication(new CookieAuthenticationOptions());

    app.UseOpenIdConnectAuthentication(
        new OpenIdConnectAuthenticationOptions
        {
            ClientId = clientId,
            Authority = authority,
            PostLogoutRedirectUri = postLogoutRedirectUri,
        });
}

第二种方法 - 基于 VS 2013 Ultimate 提供的模板
在这里,当您使用 VS 2013 创建新应用程序并使用组织帐户选项配置身份验证时,它会添加以下 appsettings 'ida:FederationMetadataLocation'、'ida:Realm' 和 'ida:AudienceUri' 然后添加验证用户的代码

问题
1> 我不确定我应该使用哪种方法,有什么区别。
2> 根据 Microsoft 视频here,如果您使用第二种方法创建应用程序,Visual Studio 将在 Azure AD 中为该租户创建应用程序。但是它不再创建了,最近有变化吗?我们是否总是需要在 Azure AD 中手动创建应用程序?

EDIT1
当我在 VS 2013 中创建新的 MVC 或 Web 窗体应用程序并配置身份验证时,有 4 个选项。其中 2 个是“个人账户”和“组织账户”。上述方法 1 适用于“个人帐户”,方法 2 适用于组织帐户。但是我仍然不知道什么时候应该使用一个而不是另一个?为什么一个使用客户端 ID 而另一个使用 restful API(联合元数据)?如果我希望同一个用户可以访问多个云应用程序,我应该使用哪种方法?

【问题讨论】:

标签: azure asp.net-identity owin azure-active-directory


【解决方案1】:

很抱歉造成混乱。随着技术的发展,您正在经历的是多个版本的分层。让我澄清几点。

  1. Visual Studio 2013 在用于 Web 签名的 OWIN 中间件之前发布 可用。因此,ASP.NET 项目模板 仍然基于旧技术(Windows Identity Foundation)和 旧协议(ws-federation)。
  2. 在 VS2013 发布后,我们开发了新的类(您在快速入门文章中遇到过),它们通过更灵活的对象模型(OWIN 中间件)和更现代的协议(openid connect)支持 Web 登录。您可以选择“手动”使用此类类,如快速入门中所述,或者使用 Visual Studio 2015 中的新模板 - 它放弃旧技术 (WIF) 并自动化 a) 使用 OWIN 中间件生成项目 b)在您选择的 Azure AD 租户中为应用程序预配一个条目。
  3. 个人帐户与“工作和学校”帐户的选择允许您选择您的应用程序是逐个验证用户(对于前者)并拥有所有用户的详细信息,或者您是否希望您的应用程序将验证外包给组织您的用户来自哪里。如果要使用 Azure AD,则需要执行后者:身份验证由 Azure AD 完成,您只需将应用配置为在需要对用户进行身份验证时重定向到 Azure AD。

【讨论】:

  • @vironet 感谢您的澄清。但是我们有一种情况,我们需要使用“个人用户身份验证和 facebook/google”,并且我们还需要包含 Azure AD 身份验证。你能为我指出正确的方向吗。所以,到目前为止我已经找到了stackoverflow.com/questions/31660780/… 的问题并且没有解决方案。
【解决方案2】:

【讨论】:

  • 这两篇文章都使用了我上面在方法1中提到的相同步骤。我想知道这两种方法之间有什么区别 为什么它们有不同的应用程序设置?为什么一种方法使用 clientid 而另一种方法使用 restful API ..比如联合元数据
  • 一个正在使用 WsFederation,它使用与 WSFed 相关的术语:FederationMetadataLocation、Realm、AudienceUri。一种是使用 OpenIdConnect,用户称之为:Authority、ClientId、Audience。 WsFed 和 OIDC 是用于从身份提供者 (IDP) 获取身份的两种协议。我会推荐 OIDC,整个行业都在朝着这个方向发展。
  • 谢谢。这就是我一直在寻找的。但是,如果我使用 VS 2013 Ultimate Update 5 创建一个新应用程序并将其配置为使用工作和学校帐户,它仍然使用 WSFedderation 方法。不知道为什么它不使用新方法 OpenIDConnect
  • 最简单的方法是使用 OWIN。 Katana 是今年发布的新 ASP.CORE 中扩展并成为一流的模型。对于 OWIN,请参阅:asp.net/aspnet/overview/owin-and-katana/…。对于 ASP.CORE,请参阅:github.com/aspnet/Home
  • 我使用 .NET 4.5.1 和 MVC 5。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 2017-03-07
  • 1970-01-01
  • 2015-08-09
  • 1970-01-01
相关资源
最近更新 更多