代表流程的天蓝色广告范围始终会破坏所有同意的范围

时间:2019-05-15 14:50:28

标签: azure oauth-2.0 azure-active-directory

我正在尝试构建一个作为nodejs / react应用程序运行的应用程序。它会调用一个外部API,该API也将使用流的代表功能在azure广告中注册。

基于登录的用户,我希望代表登录的用户请求将某些范围传递给服务。我的代码如下:

const request = require('request');

function getApiTokenOnBehalfOf(req, callback) {

    var options = {
        method: 'POST',
        url: 'https://login.microsoftonline.com/organizations/oauth2/v2.0/token',
        headers:
        {
            'Content-Type': 'application/x-www-form-urlencoded'
        },
        form:
        {
            assertion: req.user.accessToken,
            grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer',
            client_id: process.env.PASSPORT_AZUREAD_ID,
            client_secret: process.env.PASSPORT_AZUREAD_SECRET,
            scope: 'https://`myorg.com/api/Users.Read.All',
            requested_token_use: 'on_behalf_of'
        }
    };

    request(options, callback);

}

由于某种原因,令牌中返回的范围始终包括 all 用户已为此应用程序同意的范围。如何将返回给用户的令牌限制为我在通话中要求的令牌?

1 个答案:

答案 0 :(得分:0)

如果您试图获取访问令牌以访问其他资源,则scps和权限无关紧要,因为受众群体将有所不同。

但是,如果您确实试图用细齿梳来控制权限,则默认作用域将仅返回静态权限,因此仅期望的权限应通过访问令牌返回。有关此方面的更多信息,请参见此处的文档, https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent#the-default-scope