外部API使用Azure Active Directory调用我的API安全

时间:2016-04-21 16:03:54

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

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

这只是一个API调用API,或者这是一个特殊情况,需要处理不同的方式吗?

2 个答案:

答案 0 :(得分:3)

这只是API调用API,或者这是一种特殊情况,需要采用不同的方式处理吗?

特殊情况可能取决于这些API所服务的资源的机密性以及您的应用程序所需的安全级别。最后它只是api to api call。

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

应用程序标识与AAD提供的OAuth 2.0客户端凭据授权。调用API向AAD令牌端点发出请求,其客户端ID,客户端密码(凭证)和应用程序ID(被调用者API的唯一ID)接收访问令牌作为响应。此令牌用作承载令牌以调用下游API。在这种方法中,客户机ID,客户机密钥,交换访问令牌的应用程序ID是静态值。有权访问这些值的人可能会找到危及应用程序安全性的方法(极不可能)。

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

您可以详细了解这些方法here

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

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

谢谢你, 索马。

答案 1 :(得分:0)

oAuth已针对loggin 用户对网络服务(see also reference here)完成。

  

使用OAuth为您的用户提供访问其数据的权限,同时保护他们的帐户凭据。

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

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