.net core 针对没有UI的Azure AD验证用户名/密码?

.net core 针对没有UI的Azure AD验证用户名/密码?,.net-core,azure-active-directory,.net Core,Azure Active Directory,如何在不显示UI的情况下根据Azure AD验证用户名/密码?我有一个运行的自治进程(想想Windows服务或计划任务),其中用户名和密码存储在配置表中 因为可以说没有“用户在操纵”,所以我们不能使用显示Azure登录页面({tenantId})的常规方法 1。只需让它工作,无需更改方法(不推荐) 您可以尝试使用资源所有者密码凭据授权获取令牌。(在所有支持的不同授权中,ROPC可能是最不安全的,并带来潜在的攻击风险。还请注意,ROPC不适用于MFA,并且与联合身份验证用户存在问题,或者在这些情况

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


因为可以说没有“用户在操纵”,所以我们不能使用显示Azure登录页面({tenantId})的常规方法

1。只需让它工作,无需更改方法(不推荐)

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

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

您可以在此处了解如何使用ROPC获取令牌:


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

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

因为可以说没有“用户在驾驶”,所以我们不能使用 显示Azure登录页面的常规方法 ({tenantId})

正如您提到的,自治进程类似于Windows服务或计划任务,从Azure AD和OAuth 2.0的角度来看,您的进程类似于一个守护进程服务。因此,与其直接从配置中使用用户名/密码凭据(这违反了安全最佳实践),不如考虑使用客户端凭据授予。强烈建议不要在应用程序中直接收集/管理/存储最终用户凭据(或创建旧世界服务帐户)

您可以在此处详细阅读:

还可以访问所有Azure AD应用程序类型和场景的本文档,特别是为守护程序应用程序列出的那些类型和场景

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

a。客户端ID+客户端密钥(由Azure AD专门为您的应用程序提供。您可以为不同的目的生成多个密钥,并具有不同的到期日等)

b。客户端ID+证书(传递一个JWT,您需要创建该JWT,并使用您注册为应用程序凭据的证书进行签名)