Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用OAuth2客户端凭据流保护Azure API管理中的后端服务_C#_Azure Active Directory_Asp.net Core Webapi_Openid Connect_Azure Api Management - Fatal编程技术网

C# 使用OAuth2客户端凭据流保护Azure API管理中的后端服务

C# 使用OAuth2客户端凭据流保护Azure API管理中的后端服务,c#,azure-active-directory,asp.net-core-webapi,openid-connect,azure-api-management,C#,Azure Active Directory,Asp.net Core Webapi,Openid Connect,Azure Api Management,我已经部署了一个.NET核心Web API,并通过Azure API管理提供了访问。我现在希望使用OAuth2客户端凭据流来保护后端 我已添加Azure AD身份验证,如下所示: services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme) .AddAzureADBearer(options => { Con

我已经部署了一个.NET核心Web API,并通过Azure API管理提供了访问。我现在希望使用OAuth2客户端凭据流来保护后端

我已添加Azure AD身份验证,如下所示:

services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
                .AddAzureADBearer(options =>
                {
                    Configuration.Bind("AzureAd", options);
                });
我已经在Azure AD中创建了一个应用程序注册和客户端机密,并通过使用下面的代码创建一个令牌并调用API来确认它正在工作

var clientCred = new ClientCredential(clientId, clientSecret);

            var result = await authContext.AcquireTokenAsync(resource, clientCred);

            return result.AccessToken;
是否可以在Azure API管理中使用此流?我希望Azure API管理层能够处理获取令牌和传入标头的问题

我发现的最接近的是下面的文章,但这似乎涉及API传递头的使用者,这似乎违背了API管理订阅功能的要点


目前,在APIM端执行此操作的唯一方法是使用发送请求策略执行OAuth流。这将要求您提供APIM客户端id和secret,但您可以使用命名值来安全地存储它们。

目前,在APIM端实现这一点的唯一方法是使用发送请求策略来执行OAuth流。这将要求您提供APIM客户端id和密码,但您可以使用命名值安全地存储它们。

请参阅感谢链接。在这种情况下,客户端似乎必须进行身份验证,这与Microsoft示例类似。我仍然对两件事感到困惑:1)如果客户端正在进行身份验证,那么API管理订阅密钥有什么意义2)是什么阻止客户端直接访问后端服务。我认为需要有一种方法来确保后端API只能从API管理中调用。根据我的理解,除了使用证书或VNET(这是一种高级功能)之外,我看不到其他方法可以做到这一点,您正在尝试的东西是不安全的。实际上,客户端应该处理令牌部分并传递给Azure APIM。请参阅感谢链接。在这种情况下,客户端似乎必须进行身份验证,这与Microsoft示例类似。我仍然对两件事感到困惑:1)如果客户端正在进行身份验证,那么API管理订阅密钥有什么意义2)是什么阻止客户端直接访问后端服务。我认为需要有一种方法来确保后端API只能从API管理中调用。根据我的理解,除了使用证书或VNET(这是一种高级功能)之外,我看不到其他方法可以做到这一点,您正在尝试的东西是不安全的。实际上,客户端应该处理令牌部分并传递给Azure APIM。