【问题标题】:Authentication with Azure Active Directory - how to accept user credentials programmatically使用 Azure Active Directory 进行身份验证 - 如何以编程方式接受用户凭据
【发布时间】:2014-11-07 05:35:02
【问题描述】:

是否有任何方法可以使用我自己在 Azure 之外托管的用户名和密码页面通过 Web 应用程序或 Web api 登录到 Azure Active Directory(使用 AD 凭据)?

根据我的调查,似乎没有通过编程方式发送用户名和密码以使用 Azure AD 对用户进行身份验证(如果您在 Azure 之外托管应用程序) 不确定他们是否认为这是某种安全漏洞(我不认为这是强制执行 https 吗?)

似乎您只能通过代码授权来验证用户身份(这意味着弹出我们的应用程序以登录外部站点)。

最终,我想创建一个 python flask api,如果可能的话,可以直接针对 Azure AD 进行身份验证。 我过去(使用其他身份验证系统)使用 Oauth grant_type=password 发送用户名并通过,但不认为 Azure AD 支持此操作(如果我错了,请纠正我?) 我知道 grant_type=client_credentials 是受支持的,但这似乎是它对服务身份验证的服务,这不是我所追求的 http://msdn.microsoft.com/en-us/library/azure/dn645543.aspx

如果不可能为此在 Azure 之外托管一个登录页面,是否甚至可以在 Azure 内部拥有一个登录页面,看起来像这里的示例: http://msdn.microsoft.com/en-us/library/azure/bc8af4ff-66e7-4d5b-b3d4-c33d2c55d270#BKMK_Browser 没有带有密码字段的自定义登录页面..(似乎只有打开的 id 登录)

【问题讨论】:

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


    【解决方案1】:

    Azure Active Directory 支持Resource Owner Password Credentials Grant (grant_type=password) 流。但是,在使用它之前,请考虑它是否真的需要。正如 OAuth 2.0 RFC 中所说:

    资源所有者密码凭证(即用户名和密码)可以直接用作授权授予来获取访问令牌。仅当资源所有者和客户端之间存在高度信任时(例如,客户端是设备操作系统或高特权应用程序的一部分),以及其他授权授予类型不可用(例如授权码)。

    如果您确定其他支持的流程肯定不适用于您的方案,那么还请务必遵循 RFC 中的第二条建议:

    尽管这种授权类型需要客户端直接访问资源所有者凭据,但资源所有者凭据用于单个请求并交换访问令牌。这种授权类型可以通过将凭据与长期访问令牌或刷新令牌交换来消除客户端存储资源所有者凭据以供将来使用的需要

    (在两种情况下都添加了重点。)

    GitHub 上有一个使用此流程的 .NET 和 ADAL 示例,它应该足够简单,可以在 Python 中实现:https://github.com/AzureADSamples/NativeClient-Headless-DotNet

    编辑:您可以在任何地方托管您的应用程序,它不需要在 Azure 上。这适用于所有流。

    【讨论】:

    • 感谢您的信息。我假设 authContext.AcquireToken(todoListResourceId, clientId, uc); call 正在发送用户名并通过?
    • 我也可以使用这个流程并传入client_secret吗? msdn.microsoft.com/en-us/library/azure/dn645542.aspx。问题是我看不到更改标准 AD 登录页面的方法(除了图像等,您可以在 Azure AD 设置中更改),您无法在调用 /authorize 时阻止它显示
    • 是的,authContext.AcquireToken(todoListResourceId, clientId, uc) 传入用户名和密码(在 UserCredentials 对象中,但这只是 ADAL 解释的内容)。如果您传入客户端密码,则您不是以用户身份进行身份验证,而是以应用程序身份进行身份验证。这就是Client Credentials Grant 流,它也受支持。这是一个或另一个,而不是同时。
    • 回答第二条评论:当您使用资源所有者密码凭据授予流程时,您的应用程序正在收集用户名和密码,并将其直接传递给 AAD 进行身份验证。没有将用户发送到 AAD 登录页面。
    • 感谢您提供详细信息!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    相关资源
    最近更新 更多