【问题标题】:Headless authentication with Azure AD (user/pass combination)使用 Azure AD 进行无头身份验证(用户/密码组合)
【发布时间】:2016-05-08 23:19:16
【问题描述】:

我正在遵循 Microsoft here 提供的指南和示例,我能够让演示正常工作,在控制台应用程序中进行身份验证,然后使用正确的令牌向 Web API 发出请求。

我希望使用它,但控制台应用程序中的代码需要移动到 Web 应用程序。本质上:外部服务器尝试访问安全的 Web API,在 HTTPS 请求的 Authentication 标头中提供 Azure AD 用户名/密码。我在第一个不安全的 Web API 中获取这些凭据,并尝试针对 AD 对凭据进行身份验证,从而获得令牌。然后,我将通过使用 AD 令牌发出请求来调用 [Authorize]-protected Web API。

此时我正在使用上面链接示例中的相同代码,只是将控制台应用程序中的代码向上移动到第一个不安全的 Web API 控制器中,但我没有运气。我在CloudIdentity 上读到“您只能使用来自本机客户端的这些流。机密客户端(例如网站)不能使用直接用户凭据。”。这是真的?如果是这样,还有其他方法可以实现我的目标吗?我需要使用凭据,因为将来可能会有更多服务使用 API,因此每个服务都需要自己的凭据才能使用,这些凭据可以在 Azure 中进行管理。

编辑:在阅读有关此内容的更多信息时,我是否真的打算使用客户端身份验证,在 Azure AD 中创建一个“应用程序”,并将客户端 ID 提供给每个希望调用 API 的外部服务,然后进行身份验证那个,而不是凭据?

【问题讨论】:

    标签: asp.net azure authentication asp.net-web-api adal


    【解决方案1】:

    是的,您的编辑是正确的。 Resource Owner Password Credentials grant 用于验证用户,而不是应用程序。典型用途是来自提示您输入用户名和密码然后从 Azure AD 检索令牌的应用程序。

    您可以使用Client Credentials grant 从机密客户端从 Azure AD 获取令牌,以在没有用户上下文的情况下调用 API。此流程要求您在 Azure AD 中注册应用程序并生成密钥(将用作客户端机密)。然后,您可以使用 ADAL 库从 AAD 获取令牌,如 here 所示。

    【讨论】:

    • 完美 - 谢谢。因此,如果我将这个示例分开,外部应用程序会向我的 API 发送什么,只是客户端 ID?还是客户端 ID 和 App Secret?
    • 我应该补充一点,我知道在完美的世界中,外部应用程序会完成所有这些操作并发送令牌,但我不能保证外部服务器的语言能够使用Azure 库,因此在调用安全 API 之前需要在 API 中获取令牌。在这种情况下,他们发送的只是客户 ID?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 2016-05-06
    • 2020-02-20
    • 2021-05-16
    • 2018-01-17
    相关资源
    最近更新 更多