我正在构建一个 Python Web API,我想在其中使用 Azure AD 作为身份验证后端。在某些情况下,客户端需要通过 API 进行身份验证才能授权给某些端点。客户端本身无法直接向 AD 进行身份验证,因此需要使用原始凭据(用户名、密码)通过 API 进行验证。然后 API 将对用户进行身份验证并接收 AD 令牌并将其提供给用户。
所以简而言之,我正在寻找一种使用用户名/密码以编程方式对用户进行身份验证并使用 Python 接收令牌的方法。
我正在构建一个 Python Web API,我想在其中使用 Azure AD 作为身份验证后端。在某些情况下,客户端需要通过 API 进行身份验证才能授权给某些端点。客户端本身无法直接向 AD 进行身份验证,因此需要使用原始凭据(用户名、密码)通过 API 进行验证。然后 API 将对用户进行身份验证并接收 AD 令牌并将其提供给用户。
所以简而言之,我正在寻找一种使用用户名/密码以编程方式对用户进行身份验证并使用 Python 接收令牌的方法。
您可以在此Azure AD 文章中找到与应用程序类型和拓扑相关的不同身份验证流程。如果您选择实施,本文链接到身份验证流程的协议概述。
还有用于 Azure AD 的ADAL Python身份验证库,您可以使用它来执行这些流程。
根据您的情况,您有几个选择。如果您的客户端应用程序可以直接使用 Azure AD 进行身份验证,您可以查看客户端凭据流示例。如果您的应用程序需要用户进行身份验证并且可以让用户以交互方式进行身份验证,您可以查看此身份验证代码流示例。最后,如果您必须使用用户的凭据在应用程序中以编程方式进行身份验证(无需用户交互),您可以参考资源所有者密码流程,但不鼓励这样做,如其他答案中所述。
您所描述的是 OAuth 2资源所有者密码凭据授予流程。
注意:使用这个通常是一个非常糟糕的主意,应该考虑其他一些流程。
您在这里所做的是将包含用户凭据的 POST 请求以明文形式直接发送到身份验证端点。从而绕过所有可能实施的附加安全措施。
此外,它不会工作时
如果可能,请考虑其他一些授权流程,例如
请参阅此链接以帮助您选择要使用的流程。