【问题标题】:External API's Calling My API Secured with Azure Active Directory外部 API 调用我的 API 使用 Azure Active Directory 保护
【发布时间】:2016-08-14 23:19:56
【问题描述】:

如果我有一个使用 Azure Active Directory 保护的 API,当外部 API 想要与我的内部 API 通信时,流程是什么?

这只是正常的 API 到 API 调用,还是这是一种特殊情况,需要以不同的方式处理?

【问题讨论】:

    标签: oauth azure-active-directory openid-connect


    【解决方案1】:

    这只是正常的 API 到 API 调用,还是这是一种特殊情况,需要以不同的方式处理?

    特殊情况可能取决于这些 api(s) 所服务资源的机密性以及您的应用程序所需的安全级别。最后它只是一个 api 到 api 调用。

    如果 Azure Active Directory (AAD) 是整个应用程序的身份提供者,则可以使用两种方法。

    AAD 提供的具有 OAuth 2.0 客户端凭据授权的应用程序身份。调用 API 使用其客户端 ID、客户端密码(凭证)和应用程序 ID(被调用者 API 的唯一 ID)向 AAD 令牌端点发出请求,以接收访问令牌作为响应。此令牌用作 Bearer 令牌以调用下游 API。在这种方法中,用于访问令牌的客户端 ID、客户端密码、应用程序 ID 是静态值。有权访问这些值的人可能会找到一种破坏应用程序安全性的方法(极不可能)。

    第二种方法是使用 OAuth 2.0 授权用户身份。向 AAD 令牌端点发出请求,其中包含客户端 ID、客户端密码、作为调用 tier1 API 的一部分接收的访问令牌和一个特殊的 on_behalf_of 参数以接收访问令牌、刷新令牌作为响应。我们更喜欢这种方法,因为它使用动态值(来自 tier1 api 的访问令牌)并且还提供刷新令牌。

    您可以阅读有关这些方法的更多信息here

    如果您不想使用 AAD,可以使用 OwinAuthenticationMiddleware 中内置的 asp.net 来生成和验证您自己的访问令牌。如前所述,这完全取决于您的应用程序要求和实现细节,但最终它是一个 API 到 API 调用。

    希望对您有所帮助,如果您有任何问题,请告诉我。

    谢谢你, 索玛。

    【讨论】:

      【解决方案2】:

      oAuth 用于将 user 登录到 Web 服务 (see also reference here)

      使用 OAuth 让您的用户能够访问他们的数据,同时保护他们的帐户凭据。

      由于另一个 web 服务想要使用您的服务,最好的方法是使用另一种身份验证方法来授权

      其他 API,我假设您说的是机器而不是用户(别名人类)。 所以最好的方法是提供另一种身份验证机制,以便授权机器以安全的方式连接到您的 API。 进行机器连接的一种简单方法是使用带有公钥/私钥的私有PKI。 PKI 的一个很好的参考:http://docs.oracle.com/javase/6/docs/technotes/guides/security/certpath/CertPathProgGuide.html

      【讨论】:

        猜你喜欢
        • 2017-08-29
        • 1970-01-01
        • 1970-01-01
        • 2017-11-05
        • 2021-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-27
        相关资源
        最近更新 更多