我正在拼命地尝试将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管理查询我的新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) 我已经根据用户 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) 我试图根据这篇文章和这篇文章在我的 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 门户(此时为旧版开发人员门户)的一部分,因此我不填写范围参数。你如何设置该属性?或者问题出在其他地方?
我正在尝试使用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 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)来获得访问令牌,但该令牌并不让我做一个POST上https://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中模仿自己.现在,我POST的applications终点成功了.
我的最后一个问题是:我是否可以为我的应用程序授予足够的权限,以便我可以使用客户端凭据流以编程方式添加应用程序,而不是代表用户执行的任何流程?如果是这样,它是如何完成的?
我正在尝试了解Azure API管理套件是否在其安全性或策略设置中包含任何WAF功能(例如OWASP所述).
如果"不"或"不"知道前面面向公众的API(处理PII),通过Azure API管理与Web应用程序防火墙(WAF)或云中的任何其他地方公开 - > APIM - > VPN - >防火墙 - >内部部署服务拓扑?
提前致谢
我开发了几个Microsoft Azure功能.我想使用带防火墙的网关来使我的Azure功能可用并仅使用一个公共IP进行保护.
有没有办法将Azure功能与Azure应用程序网关或API管理一起使用?
在这种情况下,最好的方法是什么?
我们已经实现了如下设置:
现在我们看到的是两件事:
因此,API 管理实例似乎无法解析我们在 Azure 中设置的自定义 DNS 区域。我找不到任何信息告诉我是否支持这种情况。确实非常欢迎任何可能有助于找到问题的指针。
更新当我们通过上传文件注册API,然后尝试调用其中一个API方法时,出现以下错误:
The remote name could not be resolved
Run Code Online (Sandbox Code Playgroud)
这个相同的地址从完全相同的 VNet 中的 VM 解析得很好。
我有一个要求,我有 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 策略中实现这一点?
谢谢,阿尼什。