【问题标题】:Combining Authentication using Azure AD with Username Password Stored in Database将使用 Azure AD 的身份验证与存储在数据库中的用户名密码相结合
【发布时间】:2020-12-15 04:40:44
【问题描述】:

目前,我正在构建使用两个选项进行身份验证的 Web 应用程序 + Web API。有一个登录页面(登录页面)要求用户选择通过以下方式进行身份验证:

  1. (内部)Azure AD

  2. (外部)用户名和密码

如果选择 Azure AD,它将重定向到 login.microsoftonline.com。 如果选择用户名和密码,则会要求用户输入用户名和密码。稍后它将通过数据库(主用户)进行验证。

我已经通过 Azure AD 设置了我的 Web 应用程序和我的 Web API。

问题:

  • 如何验证使用外部帐户访问的用户(通过用户名和密码)?
  • 能否在 Azure AD 中创建 1 个虚拟帐户(例如 emailxxx.onmicrosoft.com)并在此帐户下为我的所有外部帐户执行身份验证?我看到我的一些选项是使用资源所有者密码凭据授予流程 (ROPC),但不建议这样做。

【问题讨论】:

  • 您所说的外部用户是来宾用户吗? docs.microsoft.com/en-us/azure/active-directory/…
  • 是的,但我想为我的所有外部用户创建 1 个来宾用户,因为他们不会使用存储在 Azure AD 中的密码登录,而是来自我的应用程序数据库主用户。我设法通过使用来自 IPublicClientApplication 的 AcquireTokenByUsernamePassword 来执行 ROPC。如何为 Azure AD 帐户执行模拟?

标签: asp.net-core authentication azure-active-directory


【解决方案1】:

首先,您需要将来宾用户添加到 Azure 广告,请参阅:Add Azure Active Directory B2B collaboration users in the Azure portal

如何验证使用外部帐户访问的用户 (通过用户名和密码)?

您可以通过验证访问令牌的acct 声明来验证登录用户是否为来宾用户。如果用户是租户的成员,则值为0。如果他们是客人,则值为1

可以在 Azure AD 中创建 1 个虚拟帐户(例如 emailxxx.onmicrosoft.com)并在此执行身份验证 占我所有的外部帐户?我看到我的一些选项正在使用 资源所有者密码凭据授予流程 (ROPC),但它不是 推荐。

您可以将外部帐户作为来宾添加到 Azure 广告租户,然后使用 ROPC flowauth code flow 执行身份验证。 (但是,基于安全考虑,微软建议不要使用ROPC流。这个流对应用程序的信任度要求非常高,并且带来了其他流中不存在的风险。这个流应该只在其他时使用,不能使用更安全的流量。)

【讨论】:

  • 如果我的回答对您有帮助,您可以接受它作为答案(单击答案旁边的复选标记将其从灰色切换为已填充。)请参阅:meta.stackexchange.com/questions/5234/…。这对其他社区成员可能是有益的。谢谢。
  • 感谢您的帮助。访客帐户是准确的。 ROPC Flow 仅帮助执行 Web API 调用,但不授予 Web 应用程序控制器的身份验证。无论如何,在线阅读此主题后...我认为 MSAL 不提供模拟登录。我会关闭这个话题。
【解决方案2】:

这是我想要实现的流程: My Web Application Authentication Process

在浏览了各地的论坛后,我可以得出以下结论:

  • MSAL 不支持登录模拟 => 我正在尝试在数据库中验证用户名密码后执行,系统可以自动执行 Azure AD 登录作为访客帐户(所有外部用户的 1 个联合帐户)跳过登录页面登录。 microsoft.online.com。

为了实现这一点,我使用 Dot Net Core 会话作为我网页中所有控制器的主要授权。如果不存在,则系统将重定向到登录页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    相关资源
    最近更新 更多