category
作为一名开发人员,当你有一个API需要调用另一个API时,你如何确保零信任?在本文中,您将学习如何在代表用户工作时安全地开发应用程序。
当用户驱动应用程序的UI时,该应用程序可能会使用委派权限,以便API知道该应用程序是代表哪个用户工作的。它将检查应用程序在调用API时提供的访问令牌中的主题(子)声明或对象ID(oid)和租户ID(tid)声明。API不会依赖于不受信任的应用程序,这只是来自网络上某个地方的调用。相反,它会验证令牌,以确保API仅代表Microsoft Entra ID验证的应用程序用户工作。
当一个API(我们称之为原始API)调用另一个时,我们调用的API(我们称其为下游API)遵循上述验证过程是至关重要的。下游API不能依赖于不受信任的网络源。它必须从正确验证的访问令牌中获取用户身份。
如果下游API没有遵循正确的验证流程,则下游API必须依赖原始API以另一种方式提供用户身份。下游API可能错误地使用应用程序权限来执行操作。然后,原始API将成为唯一的权威机构,用户可以根据下游API获得哪些结果。原始API可能有意(或无意)允许用户完成用户无法完成的任务。例如,一个用户可以更改另一个用户的详细信息,或者阅读和更新该用户无权访问的文档。不正确的验证可能会导致严重的安全问题。
为了更好的安全性,当原始API进行调用时,原始API获取委托权限访问令牌以提供给下游API。让我们来看看它是如何工作的。
客户端应用程序获取访问令牌以调用原始API
下图显示了客户端应用程序和原始API。
图中显示了具有ID和访问令牌的客户端应用程序以及需要授权的原始API。
图表标题:客户端应用程序获取访问令牌以调用原始API。图表副标题:客户端应用程序具有访问“A”令牌,该令牌允许它代表令牌中标识的用户工作,以调用原始API。
客户端应用程序获取了原始API的授权访问令牌(由带“a”标签的五边形表示)。委派权限访问令牌允许它代表用户调用需要授权的原始API。
客户端应用程序向原始API提供访问令牌
以下动画显示客户端应用程序向原始API提供访问令牌。原始API完全验证和检查访问令牌,以确定客户端应用程序用户的身份。
动画图显示客户端应用程序向需要授权的原始API提供访问令牌。
动画图显示了两个图,其中第一个图和第二个图之间有运动过渡。第一个图表标题:客户端应用程序获取访问令牌以调用原始API。第一个图表副标题:客户端应用程序有一个访问“A”令牌,允许它代表令牌中标识的用户工作,以调用原始API。第二个图表标题:客户端应用程序向原始API提供访问令牌。
原始API执行令牌验证和强制执行
下一个动画显示,客户端应用程序将访问令牌提供给原始API后,原始API将执行令牌验证和强制执行。如果一切正常,API将继续为客户端应用程序的请求提供服务。
动画图显示了客户端应用程序,左侧为ID令牌,右侧为原始API的访问令牌。
动画图显示了两个图,其中第一个图和第二个图之间有运动过渡。第一个图表标题:客户端应用程序向原始API提供访问令牌。第二个图表标题:原始API执行令牌验证和强制执行。如果一切正常,API将继续并为请求提供服务。
原始API无法使用访问令牌调用下游API
以下动画显示原始API现在要调用下游API。但是,原始API不能使用访问令牌来调用下游API。
动画图显示客户端应用程序向原始API提供访问令牌。需要授权阻止原始API向下游API提供令牌。
动画图显示了两个图,其中第一个图和第二个图之间有运动过渡。第一个图表标题:原始API想要调用下游API。第二个图表标题:原始API不能使用令牌调用下游API。
原始API返回到Microsoft Entra ID
在下面的动画中,原始API需要返回到Microsoft Entra ID。它需要一个访问令牌来代表用户调用下游API。
动画图显示客户端应用程序向原始API提供访问令牌,该令牌需要来自Microsoft Entra ID的验证才能调用下游API。
动画图显示了两个图,其中第一个图和第二个图之间有运动过渡。第一个图表标题:原始API无法使用令牌调用下游API。第二个图表标题:原始API返回Microsoft Entra ID。第二个图副标题:需要访问令牌来代表用户调用下游API。
下一个动画显示原始API提供原始API从客户端应用程序接收的令牌和原始API的客户端凭据。
动画图显示客户端应用程序向原始API提供访问令牌,原始API从Microsoft Entra ID接收验证以调用下游API。
动画图显示了两个图,其中第一个图和第二个图之间有运动过渡。第一个图表标题:原始API返回Microsoft Entra ID。第一个图表副标题:需要访问令牌来代表用户调用下游API。第二个图表标题:原始API返回Microsoft Entra ID。第二个图副标题:提供客户端应用程序中的令牌和原始API的凭据。
Microsoft Entra ID会检查同意或有条件访问执行等情况。您可能需要回到您的呼叫客户端,并提供无法获得令牌的原因。您通常会使用索赔质疑流程,返回呼叫应用程序,告知未收到同意的信息(例如与条件访问策略相关的信息)。
Microsoft Entra ID执行检查
在下面的动画中,Microsoft Entra ID将执行检查。如果一切正常,Microsoft Entra ID将向原始API颁发访问令牌,以代表用户调用下游API。
动画图显示原始API在使用Microsoft Entra ID验证后向下游API提供访问令牌。
动画图显示了两个图,其中第一个图和第二个图之间有运动过渡。第一个图表标题:原始API返回Microsoft Entra ID。第一个图表副标题:提供客户端应用程序中的令牌和原始API的凭据。第二个图表标题:Microsoft Entra ID检查条件访问、同意等。第二个图副标题:原始API接收其自己的访问令牌,以代表登录到客户端应用程序的用户调用下游API。
原始API具有On-Behalf-Of流的用户上下文
以下动画演示了On-Behalf-Of流(OBO)过程,该过程允许API在调用下游API时继续具有用户上下文。
动画图显示原始API向下游API提供访问令牌。
动画图显示了两个图,其中第一个图和第二个图之间有运动过渡。第一个图表标题:On-Behalf-Of流过程允许原始API在调用下游API时继续拥有用户上下文。第二个图表标题:On-Behalf-Of流过程允许原始API在调用下游API时继续拥有用户上下文。
原始API调用下游API
在下一个动画中,我们将调用下游API。下游API接收的令牌具有指示下游API的适当受众(aud)声明。
动画图显示了下游API验证原始API的访问令牌。
动画图显示了两个图,其中第一个图和第二个图之间有运动过渡。第一个图表标题:On-Behalf-Of流过程允许原始API在调用下游API时继续拥有用户上下文。第二个图表标题:调用了下游API。第二个图表副标题:下游API接收的令牌具有正确的声明,以识别客户端应用程序的用户。
令牌包括授予同意的范围和原始应用程序用户身份。下游API可以正确地实现有效的权限,以确保所识别的用户具有完成所请求任务的权限。您希望使用代表流来获取API的令牌,以调用另一个API,以确保用户上下文传递到所有下游API。
最佳选项:原始API执行On-Behlf-Of流
最后一个动画显示了原始API执行On-Behalf-Of流(OBO)的最佳选项。如果下游API接收到正确的令牌,它可以正确地响应。
动画图显示了下游API从原始API接收访问令牌。
动画图显示了两个图,其中第一个图和第二个图之间有运动过渡。第一个图表标题:调用了下游API。第一个图表副标题:下游API接收的令牌具有正确的声明,以识别客户端应用程序的用户。第二个图表标题:最佳选项是原始API“代表流”执行。如果下游API收到正确的令牌,它可以正确响应。
当API代表用户行事并需要调用另一个API时,API必须使用OBO获取委托权限访问令牌,以代表用户调用下游API。当API代表用户行事时,API不应使用应用程序权限来调用下游API。
下一步
- Microsoft身份平台身份验证流程和应用程序场景描述了身份验证流程及其使用的应用程序场景。
- API保护描述了通过注册、定义权限和同意以及强制访问以实现零信任目标来保护API的最佳实践。
- 受Microsoft身份同意框架保护的API示例可帮助您设计最低权限应用程序权限策略,以获得最佳用户体验。
- 自定义令牌描述了您可以在Microsoft Entra令牌中接收的信息。它解释了如何定制令牌以提高灵活性和控制力,同时以最小的权限提高应用程序的零信任安全性。
- 使用Microsoft标识学习安全自定义API模块介绍了如何使用Microsoft标识保护web API的安全,以及如何从其他应用程序调用它。
- 应用程序属性的安全最佳实践描述了重定向URI、访问令牌(用于隐式流)、证书和秘密、应用程序ID URI和应用程序所有权。
- Microsoft身份平台身份验证库描述了Microsoft身份验证库对各种应用程序类型的支持。
- 登录 发表评论
- 4 次浏览
最新内容
- 1 day 15 hours ago
- 1 day 18 hours ago
- 1 day 18 hours ago
- 4 days 10 hours ago
- 4 days 17 hours ago
- 4 days 18 hours ago
- 4 days 18 hours ago
- 4 days 18 hours ago
- 1 week 2 days ago
- 1 week 2 days ago