使用node-auth0程序包,可以使连接正常工作,但是现在尝试对角色进行一些工作,并添加了read:roles
范围,这会导致错误。
下面的最小代码:
const ManagementClient = require('auth0').ManagementClient;
const auth0 = new ManagementClient(
{
domain: process.env.AUTH0_DOMAIN,
clientId: process.env.AUTH0_CLIENT_ID,
clientSecret: process.env.AUTH0_CLIENT_SECRET,
scope: 'read:users update:users read:roles'
});
// both these calls fail
const auth0_roles = auth0.roles.getAll();
const auth0_tester = auth0.users.create(data);
现在,对EITHER roles
或users
的调用因以下错误而失败:
{“错误”:“ access_denied”,“错误描述”:“未授予客户端作用域:读取:角色”}
如果我从read:roles
中删除了scope
,则创建用户调用成功(但显然roles.getAll
失败了)
我已经在信息中心(APIs
=> Auth0 Management API
=> Permissions
中检查了我的API权限,它似乎包含了所有内容:
(注意:权限顶部会显示一条消息,指示重要提示:权限管理不适用于代表Auth0资源的API。-我无法更改权限)
答案 0 :(得分:1)
您无法更改Management API资源的添加/编辑/删除权限,因为正如仪表板消息所述:它是Auth0资源服务器,其标识符/受众群体为https://YOUR_DOMAIN.REGION.auth0.com/api/v2/
。范围由Auth0管理。但是,您可以修改授予服务器端客户端的作用域,即机器对机器或Web应用程序客户端类型,并限制它们在使用Client Credentials授予请求API的访问令牌时可以请求的内容。
在“ Management API资源设置”下的同一部分中,除了“权限”选项卡之外,您还可以打开“机器到机器应用程序”选项卡,找到您的clientID并确保它被授权请求该API资源所需的范围(例如read:roles
范围)。这些称为“客户赠款”,您可以通过仪表板或管理API进行管理:https://auth0.com/docs/api/management/v2#!/Client_Grants/get_client_grants
Auth0有一个客户端凭据挂钩,您可以在流程中使用它来获取更具体的逻辑,请在此处了解更多信息:https://auth0.com/docs/api-auth/tutorials/client-credentials/customize-with-hooks
答案 1 :(得分:0)
根据我对Shayan's excellent answer的评论,实际上我已经去过Auth0仪表板的那个区域了很多次,并且错过了魔术链接。
下图显示了您必须单击的位置才能设置您希望应用程序拥有的客户赠款。