用户名和密码身份验证

Warning

由于安全风险,公共客户端应用程序已弃用资源所有者密码凭据(ROPC)流。 Microsoft建议使用更安全的身份验证流。 按照有关如何 从 ROPC 迁移的官方指导进行操作。

以下内容适用于所有 MSAL 库,而不仅仅是 MSAL Python。

Microsoft建议不要使用用户名和密码流。 在大多数情况下,可以使用我们建议的更安全的替代方案。 此流要求在应用程序中高度信任,并且存在在其他流中不存在的风险。 仅当不能使用其他更安全的流时,才应使用此流。 有关为何要避免使用此授权的详细信息,请参阅为什么Microsoft正在努力使密码成为过去的事情

限制条件

  • 根据设计和策略,用户名/密码身份验证仅适用于工作和学校帐户,但不适用于Microsoft帐户(MSA)。 请参阅 此处这 2 种类型的帐户的定义
  • 用户名/密码身份验证与条件访问和多重身份验证不兼容,因为这不是交互式流,因此Microsoft 标识平台没有机会为最终用户提供基于 Web 的对话框进行交互。 因此,如果你的应用在租户管理员需要多重身份验证(许多组织这样做)的Microsoft Entra租户中运行,则此流将不起作用。
  • 由于用户名密码身份验证是非交互式流:
    • 应用程序的用户必须事先同意使用该应用程序
    • 或租户管理员必须事先同意租户中的所有用户使用该应用程序。
    • 这意味着:
      • 要么是你作为开发者在 Azure 门户中为你自己点击了 授予 按钮,
      • 或租户管理员已在该应用程序注册的 “API 权限” 选项卡中单击 “为 {tenant domain} 授予/撤销管理员同意” 按钮(请参阅 “添加访问 Web API 的权限”
      • 或者你提供了一种方法,让用户同意应用程序(请参阅 请求单个用户同意
      • 或者你为租户管理员提供了一种方法来同意应用程序(请参阅 管理员同意

Recommendations

即使选择使用用户名密码身份验证,也不应保留最终用户的密码。 初始用户名密码身份验证成功后,MSAL 的令牌缓存将启动,并自动缓存刷新令牌(RT)。 从现在起,你的应用程序只需调用 MSAL 的 acquire_token_silent(),即可在无需用户名和密码的情况下获取新的访问令牌。

Setup

Microsoft 标识平台支持公共客户端应用程序和机密客户端应用程序上的用户名密码流。 如果需要将应用配置为公共客户端应用程序,请在以下屏幕截图中打开开关以允许它。

公共应用设置