标签: azure-api-management

Azure管理REST API - "身份验证失败.'授权'标头以无效格式提供."

我正在拼命地尝试将2个经典存储帐户从我的旧MSDN订阅移动到我的MPN订阅,并且我一直在打砖墙,因为只有通过REST API支持这些移动.

我按照这里的说明启用了API ....

https://azure.microsoft.com/en-us/documentation/articles/resource-group-move-resources/

和这里...

https://msdn.microsoft.com/en-us/library/azure/dn776326.aspx

但我完全陷入了困境.我已根据建议创建了一个POST请求,以检查状态为"移动资源"指令中的第一个调用...

POST https://management.azure.com/subscriptions/ {subscriptionId} /providers/Microsoft.ClassicCompute/validateSubscriptionMoveAvailability

(将subscriptionId替换为每个的ID)并传递适当的源/目标主体.

我还提供了如下授权标题......

授权:{Azure门户生成的密钥}

现在完全迷失了.我尝试过使用Fiddler和Postman.PowerShell对我来说不是一个选项,因为我完全不知道它.我只想移动2个项目,到目前为止只是运行这些管理API已花费我超过15英镑,我的网站即将下降,因为我的信用将很快到期.

非常感激任何的帮助.

api rest azure azure-api-management

9
推荐指数
1
解决办法
9685
查看次数

通过Azure API管理使用DocumentDB API的CosmosDb

我试图通过API管理查询我的新CosmosDB集合.一旦证明,这将是用户访问记录数据的前端.出于这个原因,我有按订阅ID分区的数据.在我的WebApi DB的Logs集合的Azure门户中,我将分区键看作/ api_subscription_key.我有来自API Mgt的数据. - > Event Hub - > Stream Analytics - > Cosmos.

使用Azure门户中的查询资源管理器,我可以尝试以下查询:

SELECT * FROM c WHERE c.api_subscription_key = '573a1c65bceb52192c140131'
Run Code Online (Sandbox Code Playgroud)

这带回了我已成功写入CosmosDB多天的预期文档

    [
      {
        "eventenqueuedutctimesecond": "2017-07-27T15:09:02Z",
        "business_unit_key": null,
        "user_key": null,
        "api_message_id": "1718ea66-d225-45ec-b3fc-5daff4c7f426",
        "api_identifier": "21926e9d-9206-42b0-b4b1-7e7f1eb4e7dd",
        "api_id": "58d94cc622be39392343d4b6",
        "api_operation_id": "58e682bde055cd0ba4215d4b",
        "api_adapter_id": "573a1c64bceb520aac127ee5",
        "api_subscription_id": "573a1c65bceb52192c140131",
        "api_policy_id": "64BC4270-54AC-42DA-835C-E285F35BCA81",
        "basic_username": "",
        "message_version": "10",
        "claim_business_unit_key": null,
        "claim_user_key": null,
    ...
        "lasterrorsource": null,
        "lasterrorreason": null,
        "lasterrorscope": null,
        "lasterrorsection": null,
        "lasterrorpolicyid": null,
        "id": "7/27/2017 3:09:02 PM",
        "_rid": "9Fc0ANW4fwAoAAAAAAAADA==",
        "_self": "dbs/9Fc0AA==/colls/9Fc0ANW4fwA=/docs/9Fc0ANW4fwAoAAAAAAAADA==/",
        "_etag": "\"0700d90c-0000-0000-0000-597a020e0000\"",
        "_attachments": "attachments/",
        "_ts": 1501168140 …
Run Code Online (Sandbox Code Playgroud)

azure-api-management azure-cosmosdb

8
推荐指数
1
解决办法
943
查看次数

Azure API 管理策略 - 动态命名值选择

我已经根据用户 ID 存储了一个命名值,因此我可以通过我选择的参考来识别有效负载提交者。

当我使用下面的策略时,我获取字符串形式的值,而不是实际查找命名值。如果我只是将用户 ID 写在双大括号内,而不是从上下文中动态获取它,则查找工作正常,并且会替换为我想要的命名值。

难道就不能用简单的方法来做吗?

<policies>
  <inbound>
    <set-header name="x-request-context-data" exists-action="override">
      <value>{{@(context.User.Id)}}</value>
    </set-header>
  </inbound>
</policies>
Run Code Online (Sandbox Code Playgroud)

输出:

x-request-context-data: {{@(context.User.Id)}}
Run Code Online (Sandbox Code Playgroud)

policy azure-api-management

8
推荐指数
1
解决办法
3442
查看次数

AADSTS900144:请求正文必须包含以下参数:使用旧版开发人员门户时的“范围”

我试图根据这篇文章这篇文章在我的 APIM 实例中实现 AAD 。不幸的是,当它进入开发人员控制台时,在我选择授权代码作为授权方法后,立即出现一个弹出窗口,并向我显示以下错误:

AADSTS900144: The request body must contain the following parameter: 'scope'.
Run Code Online (Sandbox Code Playgroud)

它失败了https://login.microsoftonline.com/{Directory (tenant) ID }/oauth2/v2.0/authorize?response_type=code&client_id={client id}&redirect_uri=https://{my-apim-instance}/docs/services/{authorization method}/console/oauth2/authorizationcode/callback&state={state}

由于所有这些都是 Azure 门户(此时为旧版开发人员门户)的一部分,因此我不填写范围参数。你如何设置该属性?或者问题出在其他地方?

azure azure-active-directory azure-api-management

8
推荐指数
1
解决办法
4万
查看次数

Azure API Management Import API始终说:已存在具有指定名称的API

我正在尝试使用swagger将我的API导入Azure API管理,应该相当简单,但我总是得到相同的错误:

一个或多个字段包含不正确的值:已存在具有指定名称的API

我还没有Azure API管理中的任何设置,非常令人沮丧.

UPDATE

我正在使用Swashbuckle(https://github.com/domaindrivendev/Swashbuckle)将Swagger添加到我的WebAPI项目中.

它正在生成Swagger 2.0文档.

这是Swagger Doc的info元素:

swagger: "2.0",
info: {
version: "v3",
title: "ShopZioAPIv3"
},
Run Code Online (Sandbox Code Playgroud)

我改变它并不重要,我仍然总是得到:

一个或多个字段包含不正确的值:已存在具有指定名称的API

azure azure-api-management

7
推荐指数
2
解决办法
4912
查看次数

使用客户端凭据流以编程方式在Azure AD中添加应用程序

为了与Azure API管理一起使用,我尝试以编程方式将应用程序添加到Azure Active Directory(AAD),在我的例子中使用Graph API.

我的方案如下:为了保护我想要使用Azure API Management管理的Web API,我想利用AAD的OAuth功能来完成有关身份验证和发布JWT令牌的繁重工作,然后只使用validate-jwt策略验证Azure API管理中的一切正常.这有利于我可以或多或少地在我的后端服务中省略身份验证.

这可以正常工作,只要我在Azure AD中为使用Web应用程序创建了一个应用程序,但这必须从Azure门户手动完成; Azure APIm不会自动执行此操作.

现在我正在尝试自动完成这项工作:我想将APIm中的API委托给我正在编写的其他Web应用程序,并从那里开始利用Graph API在Azure中创建应用程序AD并授予API应用程序的权限.

我尝试做的第一件事是让第三个应用程序(我的服务应用程序)拥有Azure AD中Windows Azure Active Directory应用程序的完全应用程序权限; 这使我的应用程序可以使用Graph REST API访问AAD.我管理使用client_credentials补助(从login.microsoft.com)来获得访问令牌,但该令牌并不让我做一个POSThttps://graph.windows.net/(my AAD ID)/applications?api-version=1.5:

    {
        "odata.error": {
            "code": "Authorization_RequestDenied",
            "message": {
                "lang": "en",
                "value": "Insufficient privileges to complete the operation."
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我发现(https://msdn.microsoft.com/Library/Azure/Ad/Graph/howto/azure-ad-graph-api-permission-scopes),即使我授予了Directory.ReadWrite.All许可,该应用程序(仅限应用程序)将无法创建或更新应用程序:

注意:特别排除上面未列出的实体的创建或更新.这包括:应用程序,Oauth2PermissionGrant,AppRoleAssignment,Device,ServicePrincipal,TenantDetail,域等.

我尝试的下一件事是资源所有者密码授予(grant_type=password),另外传递我自己的凭据,以便我可以在Graph API中模仿自己.现在,我POSTapplications终点成功了.

我的最后一个问题是:我是否可以为我的应用程序授予足够的权限,以便我可以使用客户端凭据流以编程方式添加应用程序,而不是代表用户执行的任何流程?如果是这样,它是如何完成的?

api azure oauth-2.0 azure-api-management azure-ad-graph-api

7
推荐指数
1
解决办法
2253
查看次数

Azure API管理是否包含WAF功能?

我正在尝试了解Azure API管理套件是否在其安全性或策略设置中包含任何WAF功能(例如OWASP所述).

如果"不"或"不"知道前面面向公众的API(处理PII),通过Azure API管理与Web应用程序防火墙(WAF)或云中的任何其他地方公开 - > APIM - > VPN - >防火墙 - >内部部署服务拓扑?

提前致谢

security firewall azure azure-api-management

7
推荐指数
1
解决办法
2249
查看次数

Azure功能和Azure应用程序网关或API管理

我开发了几个Microsoft Azure功能.我想使用带防火墙的网关来使我的Azure功能可用并仅使用一个公共IP进行保护.

有没有办法将Azure功能与Azure应用程序网关或API管理一起使用?

在这种情况下,最好的方法是什么?

azure azure-api-management azure-api-apps azure-functions

7
推荐指数
1
解决办法
4138
查看次数

Azure API 管理解析内部 URL

我们已经实现了如下设置:

  • 应用服务环境具有公开不同 API 的不同应用服务。此实例配置为内部实例,因此不可公开访问。
  • 我们已经配置了一个内部(私有)DNS 区域。此区域用于为 API 创建内部 URL。
  • 对外暴露的 API 管理实例。这里需要使用 API 本身公开的 Swagger 文件注册 API。
  • 一切都包含在同一个 VNet 中。

现在我们看到的是两件事:

  1. 从 VNet 内的 VM,我可以毫无问题地浏览 API 的 URL 并下载 Swagger 文件。
  2. 当我们尝试在 API 管理中注册 API 时,它会抛出一个错误,指出无法下载文件。当我们手动注册然后尝试调用 API 时,我们会收到 DNS 解析错误。

因此,API 管理实例似乎无法解析我们在 Azure 中设置的自定义 DNS 区域。我找不到任何信息告诉我是否支持这种情况。确实非常欢迎任何可能有助于找到问题的指针。

更新当我们通过上传文件注册API,然后尝试调用其中一个API方法时,出现以下错误:

The remote name could not be resolved
Run Code Online (Sandbox Code Playgroud)

这个相同的地址从完全相同的 VNet 中的 VM 解析得很好。

virtual-machine azure azure-api-management vnet

7
推荐指数
1
解决办法
2987
查看次数

Azure APIM“rewrite-uri”策略 - 如何删除 URL 后缀?

我有一个要求,我有 Azure APIM 面向公众的 URL - https://api.example.com/api/v1/storenumber/ordernumber

后端服务URL(注意-这里没有URL路径后缀)-https://back-end.service.com

所以我需要删除 APIM 中的“/api/v1/storenumber/ordernumber”。

如何在 Azure APIM 策略中实现这一点?

谢谢,阿尼什。

azure-api-management

7
推荐指数
1
解决办法
4854
查看次数