【问题标题】:Does Azure AD provide an API method to validate a user programmatically?Azure AD 是否提供 API 方法以编程方式验证用户?
【发布时间】:2017-11-03 21:00:48
【问题描述】:

我想通过 Web 应用和本机移动应用验证 Azure AD 用户,尽管 Azure AD 不是我使用的唯一 IdP。

我已经阅读了OAuth2 article,但我无法找到一种 API 方法来验证用户。 One answer 指出,您可以在获取令牌时传递 usernamepassword 参数,但它似乎并没有对此进行验证。

有一个 DotNet 解决方案的示例,但我不熟悉 .NET - 尝试运行它并遇到 System.TypeLoad 异常 (Could not load type of field 'Microsoft.Owin.Security.ActiveDirectory.WsFedMetadataRetriever:CS$<>9__CachedAnonymousMethodDelegate5')

我之前尝试过设置 SimpleSAML 解决方案,但缺点是对于原生应用,它需要额外的工作并且可能不适合。

【问题讨论】:

    标签: php azure single-sign-on microsoft-graph-api azure-ad-graph-api


    【解决方案1】:

    我建议您将用户重定向到 Azure AD 登录页面。

    从技术上讲,您可以尝试使用资源所有者密码凭据授权来验证用户。但它并不总是有效。

    这涉及您使用类似于以下的表单数据向 OAuth 令牌端点发出 POST 请求:

    grant_type=password&username=user@example.com&password=Password&client_id=your-client-id&client_secret=your-client-secret&resource=resource-you-want-the-token-for
    

    资源可以是https://graph.windows.net,因为默认情况下您可以访问它。如果结果是成功的,那么是的,用户存在并且凭证是有效的。

    但如果它失败了,它可能会发生,因为:

    • 用户不存在
    • 密码错误
    • 用户启用了多重身份验证
    • 用户是联合用户(来自本地 AD),并且必须通过 ADFS 完成身份验证

    所以它在某些情况下根本无法工作。

    【讨论】:

    • 如果他们打开了 MFA,有什么解决方案吗?您能否详细说明“来自本地 AD 的联合用户” - 您的意思是什么
    • 在测试中,您的建议似乎有效!虽然我对上面提到的感到好奇。此外,您认为最可靠的解决方案是什么?只要有微软登录页面,用户就可以自己登录,还是这也容易出现上面的2个子句?
    • 我建议使用 Microsoft 登录页面。如果用户返回一个有效的 id 令牌,那么他们就成功登录了。
    • 本地用户是指 Azure AD 支持我们将 Active Directory 用户从组织 Intranet 同步到 Azure AD 的场景,因此他们也可以将相同的帐户用于云服务。根据具体操作方式,Microsoft 登录页面可能需要重定向用户以登录其组织的 ADFS 服务器。
    • 这里还有一篇文章讨论了这种方法的缺点:scottbrady91.com/OAuth/…
    猜你喜欢
    • 2020-05-23
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 2012-03-26
    • 1970-01-01
    • 2018-11-14
    相关资源
    最近更新 更多