使用Azure Active Directory进行身份验证 - 如何以编程方式接受用户凭据

时间:2014-11-07 05:35:03

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

有没有办法使用我自己在Azure以外托管的用户名和密码页面通过Web应用程序或web api登录Azure Active Directory(使用AD凭据)?

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

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

最终我想创建一个python flask api,如果可能的话,可以直接对Azure AD进行身份验证。 我在过去(使用其他身份验证系统)使用Oauth grant_type =密码来发送用户名和传递,但不要认为这在Azure AD中受支持(如果我错了,请更正我?) 我知道grant_type = client_credentials是受支持的,但这似乎是它服务auth的服务,这不是什么后的im 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登录)

1 个答案:

答案 0 :(得分:14)

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

  

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

如果您已确定其他受支持的流程肯定不适用于您的方案,那么还要确保遵循RFC中的第二点建议:

  

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

(两个案例都强调了。)

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

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