通过Python Web API进行Azure AD身份验证

时间:2018-04-06 06:52:51

标签: python azure active-directory azure-active-directory azure-authentication

我正在构建一个Python Web API,我希望将Azure AD用作身份验证后端。在某些情况下,客户端需要通过API进行身份验证以授权某些端点。客户端本身无法直接向AD进行身份验证,因此需要使用原始凭据(用户名,密码)通过API进行身份验证。然后,API将对用户进行身份验证并接收AD令牌并将其提供给用户。

所以简而言之,我正在寻找一种方法,使用用户名/密码以编程方式验证用户,并使用Python接收令牌。

2 个答案:

答案 0 :(得分:0)

您所描述的是OAuth 2 Resource Owner Password Credentials Grant流程。

注意:使用这个通常是一个非常糟糕的主意,应该考虑其他一些流程。

您在此处所做的是将包含明文的用户凭据的POST请求直接发送到身份验证终结点。因此,绕过可能实施的所有可能增加的安全性。

此外,

时无法使用
  1. 为用户启用了MFA
  2. 用户是联盟用户或MS帐户
  3. 此流程无法处理过期密码
  4. 如果可能的话考虑一些其他的授权流程,例如,你可以。

    • 授权代码流程
    • 隐含授权流程
    • 客户端凭据流
    • 设备身份验证流程

    请参阅this链接,以帮助您选择要使用的流量。

答案 1 :(得分:0)

您可以在此Azure AD article中找到与应用程序类型和拓扑相关的不同身份验证流程。如果您选择实施,本文将链接到身份验证流程的协议概述。

还有用于Azure AD的ADAL Python auth库,您可以使用它来执行这些流程。

根据您的方案,您有几个选择。如果您的客户端应用程序可以直接使用Azure AD进行身份验证,则可以查看client credentials flow sample。如果您的应用程序需要用户进行身份验证并且可以让用户以交互方式进行身份验证,则可以查看此auth code flow sample。最后,如果您必须使用用户的凭据在应用程序中以编程方式进行身份验证(无需用户交互),则可以参考资源所有者密码流,但不会像其他答案中所述那样鼓励这样做。