Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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
Asp.net web api Azure API管理是否可以用作也包含API的ASP.NET MVC网站的传递?_Asp.net Web Api_Azure Api Management_Asp.net Apicontroller_Azure Traffic Manager_Apim - Fatal编程技术网

Asp.net web api Azure API管理是否可以用作也包含API的ASP.NET MVC网站的传递?

Asp.net web api Azure API管理是否可以用作也包含API的ASP.NET MVC网站的传递?,asp.net-web-api,azure-api-management,asp.net-apicontroller,azure-traffic-manager,apim,Asp.net Web Api,Azure Api Management,Asp.net Apicontroller,Azure Traffic Manager,Apim,我有一个ASP.NETMVC应用程序-网站和API控制器。我想使用Azure API管理来管理这些API,但保留相同的URL,以便为我们的消费者提供无缝服务。我们在该web应用的应用程序服务上有一个自定义域设置,该设置当前用于提供站点和API(例如,网站:xyz.com、API:xyz.com/api1、xyz.com/api2等)。我们还使用AAD进行身份验证。并将重定向URI设置到自定义域(xyz.com)。目前一切都很顺利 在我们将API管理配置为公开我们的API并可能将其用作传递之后,问

我有一个ASP.NETMVC应用程序-网站和API控制器。我想使用Azure API管理来管理这些API,但保留相同的URL,以便为我们的消费者提供无缝服务。我们在该web应用的应用程序服务上有一个自定义域设置,该设置当前用于提供站点和API(例如,网站:xyz.com、API:xyz.com/api1、xyz.com/api2等)。我们还使用AAD进行身份验证。并将重定向URI设置到自定义域(xyz.com)。目前一切都很顺利

在我们将API管理配置为公开我们的API并可能将其用作传递之后,问题就出现了。为了确保引入API管理后URL保持不变,我们将自定义域设置为位于API管理实例本身,并将其从应用程序中删除。服务这就是我们当前设置的外观-->

用户点击xyz.com,请求按如下方式进行->流量管理器->APIM(xyz.com)->应用程序服务(xxx.azurewebsites.net)

在上面最后一点之后,AAD auth。在成功身份验证后,一旦它拥有访问令牌,就应该启动。它应该重定向用户并加载页面。但事实并非如此。相反,我们会得到一个空白页面,如果我们刷新它,然后,只有到那时,它才能继续进行身份验证。然后加载页面

我们已经尝试将重定向URI设置为自定义域(xyz.com)和Azure生成的基本应用程序服务名称(xxx.azurewebsites.net)

直接点击特定的API URL(例如xyz.com/api1)可以很好地工作。它通过APIM并按预期响应。唯一的问题是,该网站没有加载如上所述

当我们将APIM从等式中去掉,并将自定义域重新设置到应用程序服务上时,一切都按预期进行


我试图弄清楚我们是否以某种方式错误地配置了这个场景中的资产,或者APIM是否不支持以这种方式为网站传递。如有任何想法/建议,将不胜感激

哇,真是太多的文字了。 好,我们来看看:

访客->流量管理->APIM->后端(你的网站)-好的,明白了

这就像是使用APIM的一种常见方式,它应该可以工作。但是,可能您的策略设置不正确

您是否构建了您的产品/API/操作?您是否看到来自APIM的请求访问您的站点?你得到了什么回应

当然,现在您需要定义和设置APIM(产品、API和每个操作)以将其传递到后端。这意味着,如果您(作为访问者)需要列出所有产品,则需要执行APIM操作(sed GetProducts)。您的请求将通过入站策略传递(如果需要,调整并构建请求),将其传递到后端(使用自定义API传递到您的网站),并且响应将从后端发送回访问者

现在来看这个:为了在APIM中保护您的Web API后端,您可以将OAuth 2.0授权与Azure AD一起使用: 总体概述:

  • 在Azure AD中注册应用程序(用于后端)以表示API
  • 在Azure AD中注册另一个应用程序(客户端),以表示将调用您的API的客户端应用程序
  • 我猜这是一个为您授予权限,允许客户端应用程序调用后端应用程序
  • 当然,还要添加验证jwt策略来验证每个传入请求的OAuth令牌
  • 请在这里阅读