在没有UI的情况下针对Azure AD验证用户名/密码?

时间:2018-10-25 22:54:21

标签: .net-core azure-active-directory

如何在不显示UI的情况下针对Azure AD验证用户名/密码?我正在运行一个自治进程(例如Windows Service或计划任务),其中用户名和密码存储在配置表中。

可以这么说,因为没有“用户在忙”,我们不能使用显示Azure登录页面(https://login.microsoftonline.com/ {tenantId})的常规方法。

1 个答案:

答案 0 :(得分:2)

1。只需使其正常运行,就无需更改方法(不推荐)

您可以尝试使用“资源所有者密码凭据授予”来获取令牌。 (在支持的所有不同授权中,ROPC可能是最不安全的,并带来潜在的攻击风险。还要注意,ROPC不能与MFA一起使用,并且对联合身份验证用户有问题,或者根本不能在这种情况下起作用)

我认为没有任何方法/端点可以专门验证用户名/密码,但是解决方法是,如果用户名或密码不正确,您将从令牌中获取异常使用ROPC时的端点,否则您将获得一个有效的令牌,这意味着凭据是好的。

您可以在此处阅读有关如何使用ROPC获取令牌的信息: Resource Owner Password Credentials Grant in Azure AD OAuth


2。建议的方法,需要进行一些更改(推荐)

这在开始时可能会带来一些不便,但是从安全的角度来看,这是值得的。请注意,这种方法以及第一种方法都可以满足您不通过常规登录页面的要求。

  

可以这么说,因为没有“用户在忙”,所以我们不能使用   显示Azure登录页面的常规方法   (https://login.microsoftonline.com/ {tenantId})。

正如您提到的那样,自治过程就像Windows服务或计划任务一样,从Azure AD和OAuth 2.0的角度来看,您的过程看起来像是 Daemon 服务。因此,您应该直接使用Client Credentials Grant,而不是直接从配置中使用用户名/密码凭据,因为这违反了安全性最佳做法。强烈建议不要直接在您的应用程序中收集/管理/存储最终用户凭据(或创建旧的服务帐户)。

您可以在这里详细了解它:OAuth 2.0 Client Credentials Grant with Azure AD

也请访问此文档以了解所有Azure AD应用程序类型和方案,尤其是针对Daemon应用程序列出的类型和方案。 Link

简而言之,您的过程由Azure AD中已注册的应用程序表示,对于凭据部分,您可以使用:

a。客户端ID +客户端密钥(由Azure AD专门为您的应用程序提供。您可以为不同目的,不同到期时间等生成多个密钥。) Sample C# code with Client Secret

b。客户端ID +证书(通过JWT,您需要创建该JWT并使用注册为应用程序凭据的证书进行签名)。 Sample C# code with Certificate


相关问题