C# 使用另一个服务中的托管标识对服务调用方进行身份验证

C# 使用另一个服务中的托管标识对服务调用方进行身份验证,c#,asp.net-web-api,azure-active-directory,microservices,azure-api-management,C#,Asp.net Web Api,Azure Active Directory,Microservices,Azure Api Management,在另一个App Service/.NET Core WebAPI(也有自己的托管标识)中验证调用方(具有托管标识的App Service/.NET Core WebAPI,不代表已登录用户)的最先进方法是什么?我想使用Azure API管理来隐藏被调用的服务,并尽可能少地隐藏密钥 编辑: API应用程序服务Azure授权/Active Directory设置: API应用程序注册详细信息: 应用程序注册/API应用程序/身份验证: 隐式授权-仅检查ID令牌 支持的帐户类型-单租户 应

在另一个App Service/.NET Core WebAPI(也有自己的托管标识)中验证调用方(具有托管标识的App Service/.NET Core WebAPI,不代表已登录用户)的最先进方法是什么?我想使用Azure API管理来隐藏被调用的服务,并尽可能少地隐藏密钥

编辑:

API应用程序服务Azure授权/Active Directory设置: API应用程序注册详细信息:

应用程序注册/API应用程序/身份验证:

  • 隐式授权-仅检查ID令牌

  • 支持的帐户类型-单租户

应用程序注册/API应用程序/公开API:

当我尝试添加客户端应用程序时,a得到以下信息(
d1d
是我的客户端应用程序服务托管id的结尾):


您的API不需要托管标识,任何都可以。设置其并使用获取令牌,如下所示:

var managedEntityCredential=new managedEntityCredential();
var scopes=new[]{{您的api应用程序id uri}/.default};//例如:api://3a768fed-640b-420c-8b33-39c701c55199/.default
var accessToken=(wait managedEntityCredential.GetTokenAsync(new Azure.Core.TokenRequestContext(scopes))).Token;

好的,这些文档有点误导。我可以在我的客户端应用程序服务中获取令牌,API应用程序服务需要身份验证,我得到401
当使用承载身份验证时,您没有查看此目录或页面的权限。
。我找不到设置访问API权限的位置。您能帮助我吗?@Wojteq请共享您的API身份验证设置代码/配置。@Wojteq应用程序权限不能预先授权。它仅适用于委派的权限。关于此错误,是因为该应用程序是一种特殊类型的应用程序,而不是普通的应用程序。您认为“应用程序权限不能预先授权”是什么意思?你是说不可能做我想做的事吗?当我在Azure Key Vault中授权我的应用程序服务时,它是如何工作的?您能告诉我如何实现我的目标吗?@Wojteq,但不具有应用程序权限(应用程序角色)。密钥保管库配置保持不变。