Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.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
从具有特定范围的Postman调用Azure WebApi_Azure_Azure Active Directory_Postman_Azure Webapps - Fatal编程技术网

从具有特定范围的Postman调用Azure WebApi

从具有特定范围的Postman调用Azure WebApi,azure,azure-active-directory,postman,azure-webapps,Azure,Azure Active Directory,Postman,Azure Webapps,我使用Postman测试我在Azure中托管的API。首先我得到一个这样的访问令牌 因为我使用了grant_type ` client_credentials,所以我必须像这样使用默认范围api://my-app-id/.default`如前所述 但是我的API的一个端点需要一个特定的作用域,因此调用失败,因为我的访问令牌不包含这个作用域 如何从具有所需范围的Postman进行测试?如果您使用客户端凭据流为受Azure保护的api获取访问令牌,则必须创建应用程序并向应用程序授予应用程序权限(这

我使用Postman测试我在Azure中托管的API。首先我得到一个这样的访问令牌

因为我使用了grant_type ` client_credentials
,所以我必须像这样使用默认范围
api://my-app-id/.default`如前所述

但是我的API的一个端点需要一个特定的作用域,因此调用失败,因为我的访问令牌不包含这个作用域


如何从具有所需范围的Postman进行测试?

如果您使用客户端凭据流为受Azure保护的api获取访问令牌,则必须创建应用程序并向应用程序授予应用程序权限(这是因为客户端凭据流没有用户交互)

然后,您需要通过编辑api应用程序列表来定义应用程序权限。这就是一个例子

接下来,向应用程序授予应用程序权限:

请参阅此文档并使用客户端凭据流获取访问令牌:

1.首先,您需要获得管理员的同意:

GET https://login.microsoftonline.com/{tenant}/adminconsent?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&state=12345
&redirect_uri=http://localhost/myapp/permissions

2.然后您可以通过共享密钥获得访问令牌:

POST /{tenant}/oauth2/v2.0/token HTTP/1.1           //Line breaks for clarity
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

client_id=535fb089-9ff3-47b6-9bfb-4f1264799865
&scope=api://your-app-id/.default
&client_secret=qWgdYAmab0YSkuL1qKv5bPX
&grant_type=client_credentials

解析令牌,您将看到您的自定义
角色

尝试使用令牌访问您的API

更新:

根据您的错误,存在用户交互,因此如果要使用用户令牌,则不应使用客户端凭据流,而应授予
客户端应用程序
委派权限。

解析令牌,您将看到自定义的
scp

如果使用客户端凭据流为受Azure保护的api获取访问令牌,则必须创建应用程序并向应用程序授予应用程序权限(这是因为客户端凭据流没有用户交互)

然后,您需要通过编辑api应用程序列表来定义应用程序权限。这就是一个例子

接下来,向应用程序授予应用程序权限:

请参阅此文档并使用客户端凭据流获取访问令牌:

1.首先,您需要获得管理员的同意:

GET https://login.microsoftonline.com/{tenant}/adminconsent?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&state=12345
&redirect_uri=http://localhost/myapp/permissions

2.然后您可以通过共享密钥获得访问令牌:

POST /{tenant}/oauth2/v2.0/token HTTP/1.1           //Line breaks for clarity
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

client_id=535fb089-9ff3-47b6-9bfb-4f1264799865
&scope=api://your-app-id/.default
&client_secret=qWgdYAmab0YSkuL1qKv5bPX
&grant_type=client_credentials

解析令牌,您将看到您的自定义
角色

尝试使用令牌访问您的API

更新:

根据您的错误,存在用户交互,因此如果要使用用户令牌,则不应使用客户端凭据流,而应授予
客户端应用程序
委派权限。

解析令牌,您将看到自定义的
scp


应用程序和/或用户是否会使用您的API?
.default
作用域应返回所有分配的权限。两者都是。返回的令牌根本不包含任何作用域。令人惊讶的是,对my webapi的调用对于不需要任何特定作用域的端点来说效果很好。如果令牌有效,就没有理由被拒绝。I您是如何向您的服务主体授予特定权限的?仅应用程序令牌将不具有
scp
声明,而可能具有
角色
声明。您的API将由应用程序和/或用户使用吗?
.default
作用域应返回所有分配的权限。两者都是。返回的令牌根本不包含任何作用域。令人惊讶的是,对my webapi的调用对于不需要任何特定作用域的端点来说效果很好。如果令牌有效,就没有理由被拒绝。I您是如何向您的服务主体授予特定权限的?仅应用程序令牌将不具有
scp
声明,而可能具有
roles
声明。我明白了。所以我必须为postman创建一个专用应用程序,并将该应用程序的权限授予我的API,对吗?因此,我必须在查询字符串中传递的客户端ID是这个新应用程序的ID,而不是API的客户端ID?@Sam是的,您需要创建一个应用程序并传递应用程序的客户端ID才能访问API。我按照每个步骤进行了操作,现在在我的令牌中,我看到角色数组中有myTestRole。但是,当调用受作用域保护的终结点时,它仍然失败,错误为“scope”声明不包含作用域文件。Upload或未找到文件。Upload是我调用的API的作用域权限之一。我在这里做错了什么?我有一种感觉,我必须改变我的API来检查方法,而不仅仅是范围,因为范围似乎只针对用户。然而,由于我正在用postman测试我的API,这意味着我必须使它与用户和应用程序兼容。根据我找到的这份文件:我是对的吗?@Sam嗨,我更新了一些答案。如果你认为我的答案对你有帮助,你可以把他作为答案。我明白了。所以我必须为postman创建一个专用应用程序,并将该应用程序的权限授予我的API,对吗?因此,我必须在查询字符串中传递的客户端ID是这个新应用程序的ID,而不是API的客户端ID?@Sam是的,您需要创建一个应用程序并传递应用程序的客户端ID才能访问API。我按照每个步骤进行了操作,现在在我的令牌中,我看到角色数组中有myTestRole。但是,当调用受作用域保护的终结点时,它仍然失败,错误为“scope”声明不包含作用域文件。Upload或未找到文件。Upload是我调用的API的作用域权限之一。我在这里做错了什么?我有一种感觉,我必须改变我的API来检查方法,而不仅仅是范围,因为范围似乎只针对用户。然而,由于我正在用postman测试我的API,这意味着我必须使它与用户和应用程序兼容。根据我找到的这份文件:我是对的吗?@Sam嗨,我更新了一些答案。如果你认为我的答案对你有帮助,你可以把他记为答案。