【问题标题】:Validate username/password against Azure AD without a UI?在没有 UI 的情况下针对 Azure AD 验证用户名/密码?
【发布时间】:2018-10-26 10:01:20
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    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 的角度来看,您的进程看起来像 守护进程 服务。因此,您应该考虑使用客户端凭据授予,而不是直接从配置中使用用户名/密码凭据,这违反了安全最佳实践。强烈建议不要直接在您的应用程序中收集/管理/存储最终用户凭据(或创建旧世界服务帐户)。

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

    还请访问此文档以了解所有 Azure AD 应用类型和方案,特别是为守护程序应用列出的那些。 Link

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

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

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


    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-23
      • 1970-01-01
      • 2021-07-29
      • 2013-04-02
      相关资源
      最近更新 更多