MicrosoftAccount、AzureAD 和 OpenIdConnect 身份验证有啥区别?

Posted

技术标签:

【中文标题】MicrosoftAccount、AzureAD 和 OpenIdConnect 身份验证有啥区别?【英文标题】:What is the difference between MicrosoftAccount, AzureAD and OpenIdConnect authentication?MicrosoftAccount、AzureAD 和 OpenIdConnect 身份验证有什么区别? 【发布时间】:2020-07-16 15:42:49 【问题描述】:

当我试图理解 MicrosoftAccountAzureADOpenIDConnect 身份验证之间的区别时,我感到非常困惑。

我正在尝试构建一个 .Net Core MVC 应用程序,该应用程序允许一些用户使用本地帐户进行身份验证,但一些用户使用 Microsoft 帐户进行身份验证。对于这两种类型的身份验证,我确实需要在 DB 中有一个本地用户,因为我有一些基于此的自定义授权机制。

我首先从模板创建应用程序并选择“本地帐户”身份验证。然后我根据本教程添加了 MicrosoftAccount 身份验证(https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/microsoft-logins?view=aspnetcore-3.1)。这是使用 Microsoft.AspNetCore.Authentication.MicrosoftAccount 并且似乎工作正常。

但是,当我从模板创建新应用并选择“工作或学校帐户”身份验证时,我可以看到它使用了不同的库 - Microsoft.AspNetCore.Authentication.AzureAD.UI。它似乎做同样的事情。我可以看到有一些事件可以连接到 AAD 用户和我的本地数据库。

浏览网络时,我发现了一些其他使用 OpenIDConnect 实现相同目的的教程。

这些方法有何不同?我应该使用哪一个?为什么?

将来我希望能够在用户目录中查询其他用户的列表。使用这三种方法中的哪一种更容易满足这个要求吗?

【问题讨论】:

【参考方案1】: MicrosoftAccount:这是使用普通 Microsoft 帐户的登录,使用 OAuth2。这也是 Microsoft 将其称为“私人帐户”的内容,当您想要仅使用他们的 Microsoft 登录作为外部身份验证提供程序来对某人进行身份验证时很有用。这类似于您使用 Google 帐户登录网站的方式。 AzureAD:这是对特定 Azure 租户的登录。这通常被理解为“工作或学校帐户”,因为它不会使用公共帐户登录,而是使用绑定到某个组织的某个帐户。通常,您将拥有一个拥有直接用户(或将其配置为允许外部用户)的 Azure 租户,但您希望通过该 Azure AD 控制访问。 OpenIdConnect:这是通用的 OpenID Connect 协议,您可以使用它与许多不同的身份验证提供程序进行登录,因为它是许多他们将支持的协议。您可以使用 OIDC 登录上述任一服务(以及许多其他服务),但这需要您进行更多配置,例如您需要确定特定地址。

您始终可以使用 OpenIdConnectOAuth 身份验证方案向大多数身份验证提供程序进行身份验证,但这些是“手动”方案,需要您配置其他内容.所有其他身份验证方案,包括 MicrosoftAccountAzureAD 以及像 GoogleTwitter 这样的其他身份验证方案都建立在上面这些协议并预先配置,因此您无需设置太多其他内容。所以这些主要是为了方便和更专业的支持。

因此,当您想通过 Microsoft 或 Azure 进行身份验证时,您应该选择 MicrosoftAccountAzureAD。其中哪一个取决于您要在哪里进行身份验证。如果你有 Azure AD,那么你应该使用它。

【讨论】:

非常感谢@poke 这或多或少是我开始研究它时的想法。但是,有一些事情使这变得更加复杂。 - 对于 MSA 和 AAD,我需要在我的 AAD 中注册一个应用程序 - 使用 MSA,我也可以使用我的工作帐户进行身份验证(与 AAD 相同) - 使用 AAD,我可以将应用程序注册为多租户并能够进行身份验证来自不同租户/域的帐户我看到的唯一区别是 AAD 不接受个人帐户。还有什么?这些方法中是否有更新/更推荐的方法?

以上是关于MicrosoftAccount、AzureAD 和 OpenIdConnect 身份验证有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

我需要为powerapps配置azureAD吗?

IdentityServer3 + AzureAD 和 RedirectUri 混淆

AzureAD 的 JWT 在 .NET 核心 API 中提供 403 Forbidden

如何使 AzureAD 和自定义 JWT 令牌在 Web API 中并行工作?

IdToken 未使用 AzureAD 签名

如何在 python 中验证来自 AzureAD 的 JWT?