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
node.js REST端点的Azure AD身份验证,带有服务主体和机密_Node.js_Azure_Rest_Azure Active Directory - Fatal编程技术网

node.js REST端点的Azure AD身份验证,带有服务主体和机密

node.js REST端点的Azure AD身份验证,带有服务主体和机密,node.js,azure,rest,azure-active-directory,Node.js,Azure,Rest,Azure Active Directory,我正在尝试调用一个受AzureAD身份验证保护的RESTAPI。从Postman REST客户端,它的工作原理如下:, https://example.com/getexample 标题:授权:持票人。如果我以交互方式获得用户的令牌(例如device_代码或MFA),这将非常有效 由于我希望以非交互方式运行代码,所以我尝试通过服务主体对REST端点进行身份验证 REST服务器构建在带有azure passport node.js包的nodejs中 我已经为它创建了服务主体(本机应用程序)和机密。

我正在尝试调用一个受AzureAD身份验证保护的RESTAPI。从Postman REST客户端,它的工作原理如下:,
https://example.com/getexample
标题:授权:持票人。如果我以交互方式获得用户的令牌(例如device_代码或MFA),这将非常有效

由于我希望以非交互方式运行代码,所以我尝试通过服务主体对REST端点进行身份验证

REST服务器构建在带有azure passport node.js包的nodejs中

我已经为它创建了服务主体(本机应用程序)和机密。我能够从这个包以及下面的curl命令中获得access_令牌

curl -X POST -d 'grant_type=client_credentials&client_id=[client id]&client_secret=[client secret]&resource=[client id of the server]' https://login.microsoftonline.com/[tenant]/oauth2/token
但如果我将生成的令牌传递给REST端点,则得到401

请帮助了解如何使用服务主体和密码对自定义REST端点进行身份验证

下面是我为服务主体(服务器和客户端)所做的配置详细信息

服务器SP(node.js应用程序) 创建服务主体,添加用户。读取API权限。管理员授予了API权限。 在“公开API”下创建了一个自定义范围(API.Access),并选择了“管理员和用户”可以授权。 在node.js应用程序中,我只使用user.read范围

客户SP(邮递员) 已创建服务主体,在API权限下添加了服务器SP(客户范围)
使用curl命令在不传递任何作用域的情况下获取访问令牌。

要以非交互方式运行代码,获取访问令牌的方式是需要应用程序权限的客户端凭据流。是委托权限和应用程序权限之间的差异

您可以编辑服务器应用程序的清单

然后,您的客户端应用程序可以添加应用程序权限(从服务器应用程序)


您是否已将web api权限授予您的客户端应用程序?我已更新了有关服务主体配置的更多详细信息的问题我在范围方面出了问题。我是否需要在node.js应用程序中添加自定义范围?在使用CURL请求访问令牌时@CaiyiJu请帮助我今天将尝试并在此处更新。我正在等待我的管理员授予权限:)。捕获Azure管理员并不容易。从技术上讲,这会起作用,但在我的组织中,获得管理员同意并不容易,我必须获得安全批准。一旦我得到批准,我会尝试一下。非常感谢。
"appRoles": [
        {
            "allowedMemberTypes": [
                "Application"
            ],
            "description": "Apps that have this role have the ability to invoke my API",
            "displayName": "Can invoke my API",
            "id": "fc803414-3c61-4ebc-a5e5-cd1675c14bbb",
            "isEnabled": true,
            "lang": null,
            "origin": "Application",
            "value": "myTestRole"
        }
    ]