外部 API 呼叫我的 API 使用 Azure Active Directory 保护
External API's Calling My API Secured with Azure Active Directory
如果我有一个使用 Azure Active Directory 保护的 API,当外部 API 想要与我的内部 API 交谈时,流程是什么?
这只是 API 到 API 的正常调用,还是特殊情况需要以不同的方式处理?
oAuth is done for loggin user to a webservice (see also reference here)。
Use OAuth to give your users access to their data while protecting their account credentials.
当另一个网络服务想要使用您的服务时,最好的方法是使用另一种身份验证方法来授权
其他 API,我假设您是在谈论机器而不是用户(别名人类)。
因此,最好的方法是提供 另一种身份验证机制 以授权机器以安全的方式连接到您的 API。
进行机器连接的一种简单方法是使用私有 PKI 和 public/private 密钥。
PKI 的一个很好的参考:http://docs.oracle.com/javase/6/docs/technotes/guides/security/certpath/CertPathProgGuide.html
这只是正常的 API 到 API 调用还是特殊情况需要以不同的方式处理?
特殊情况 可能取决于这些 api(s) 所服务资源的机密性以及您的应用程序所需的安全级别。最后它只是一个 api 到 api 的调用。
如果 Azure Active Directory (AAD) 是整个应用程序的身份提供者,您可以使用两种方法。
具有 AAD 提供的 OAuth 2.0 客户端凭据授予的应用程序标识。调用 API 向 AAD 令牌端点发出请求,其中包含其客户端 ID、客户端机密(凭据)和应用程序 ID(被调用者的唯一 ID API)以接收访问令牌作为响应。此令牌用作 Bearer 令牌来调用下游 API。在这种方法中,为访问令牌交换的客户端 ID、客户端密码、应用程序 ID 都是静态值。某些有权访问这些值的人可能会找到一种方法来破坏应用程序安全性(极不可能)。
第二种方法是使用 OAuth 2.0 的委托用户身份。向 AAD 令牌端点发出请求,其中包含客户端 ID、客户端密码、作为调用 tier1 API 的一部分接收的访问令牌和一个特殊的 on_behalf_of 参数以接收访问令牌、刷新令牌作为响应。我们更喜欢这种方法,因为它使用动态值(来自 tier1 api 的访问令牌)并且还提供刷新令牌。
您可以阅读有关这些方法的更多信息here
如果您不想使用 AAD,可以使用 asp.net 内置的 OwinAuthenticationMiddleware 来生成和验证您自己的访问令牌。如前所述,这完全取决于您的应用程序要求和实现细节,但最终它是一个 API 到 API 的调用。
希望对您有所帮助,如有任何问题,请告诉我。
谢谢,
索玛.
如果我有一个使用 Azure Active Directory 保护的 API,当外部 API 想要与我的内部 API 交谈时,流程是什么?
这只是 API 到 API 的正常调用,还是特殊情况需要以不同的方式处理?
oAuth is done for loggin user to a webservice (see also reference here)。
Use OAuth to give your users access to their data while protecting their account credentials.
当另一个网络服务想要使用您的服务时,最好的方法是使用另一种身份验证方法来授权
其他 API,我假设您是在谈论机器而不是用户(别名人类)。 因此,最好的方法是提供 另一种身份验证机制 以授权机器以安全的方式连接到您的 API。 进行机器连接的一种简单方法是使用私有 PKI 和 public/private 密钥。 PKI 的一个很好的参考:http://docs.oracle.com/javase/6/docs/technotes/guides/security/certpath/CertPathProgGuide.html
这只是正常的 API 到 API 调用还是特殊情况需要以不同的方式处理?
特殊情况 可能取决于这些 api(s) 所服务资源的机密性以及您的应用程序所需的安全级别。最后它只是一个 api 到 api 的调用。
如果 Azure Active Directory (AAD) 是整个应用程序的身份提供者,您可以使用两种方法。
具有 AAD 提供的 OAuth 2.0 客户端凭据授予的应用程序标识。调用 API 向 AAD 令牌端点发出请求,其中包含其客户端 ID、客户端机密(凭据)和应用程序 ID(被调用者的唯一 ID API)以接收访问令牌作为响应。此令牌用作 Bearer 令牌来调用下游 API。在这种方法中,为访问令牌交换的客户端 ID、客户端密码、应用程序 ID 都是静态值。某些有权访问这些值的人可能会找到一种方法来破坏应用程序安全性(极不可能)。
第二种方法是使用 OAuth 2.0 的委托用户身份。向 AAD 令牌端点发出请求,其中包含客户端 ID、客户端密码、作为调用 tier1 API 的一部分接收的访问令牌和一个特殊的 on_behalf_of 参数以接收访问令牌、刷新令牌作为响应。我们更喜欢这种方法,因为它使用动态值(来自 tier1 api 的访问令牌)并且还提供刷新令牌。
您可以阅读有关这些方法的更多信息here
如果您不想使用 AAD,可以使用 asp.net 内置的 OwinAuthenticationMiddleware 来生成和验证您自己的访问令牌。如前所述,这完全取决于您的应用程序要求和实现细节,但最终它是一个 API 到 API 的调用。
希望对您有所帮助,如有任何问题,请告诉我。
谢谢, 索玛.