Azure BotBuilder - 如何获取OAuth连接设置的用户信息

问题描述 投票:0回答:2

我创建了一个Azure Web App Bot并添加了OAuth连接设置,该设置将用户带到Salesforce。一切运作良好,我能够通过我的机器人验证用户,我也可以从Salesforce获取访问令牌。

问题有人可以帮助我从Salesforce获取用户信息吗?因为,我能够单独获取访问令牌而不确定如何从Salesforce获取用户ID。

我写了下面的代码,

var salesforce = {};

salesforce.signin = (connector, session, callback) => {
    builder.OAuthCard.create(connector,
        session,
        connectionName,
        "Sign in to your Salesforce account",
        "Sign in",
        (createSignInErr, createSignInRes) => {
            if (createSignInErr) {
                callback({
                    status: 'failure',
                    data: createSignInErr.message
                });
                return;
            }

            callback({
                status: 'success',
                data: createSignInRes
            });
        });
};

salesforce.getUserToken = (connector, session, callback) => {
    connector.getUserToken(session.message.address,
        connectionName,
        undefined,
        (userTokenErr, userTokenResponse) => {
            if (userTokenErr) {
                callback({
                    status: 'failure',
                    data: userTokenErr.message
                });
                return;
            }

            callback({
                status: 'success',
                data: userTokenResponse
            });
        });
};

salesforce.accessToken = (connector, session, callback) => {
    salesforce.getUserToken(connector, session, (userTokenResponse) => {
        if (userTokenResponse.status == 'failure') {
            // If the user token is failed, then trigger the sign in card to the user.

            salesforce.signin(connector, session, (signinResponse) => {
                // If the sign in is failed, then let the user know about it.

                if (signinResponse.status == 'failure') {
                    session.send('Something went wrong, ', signinResponse.message);
                    return;
                }

                // If the sign in is success then get the user token and send it to the user.
                salesforce.getUserToken(connector, session, (newUserTokenResponse) => {
                    if (newUserTokenResponse.status == 'failure') {
                        session.send('Something went wrong, ', newUserTokenResponse.message);
                        return;
                    }

                    callback(newUserTokenResponse);
                    return;
                });
            });
        }

        callback(userTokenResponse);
    });
};

我可以在这里得到userTokenResponse。但我需要Salesforce用户ID,以便我可以开始代表用户与Salesforce进行交互。

azure botframework bots azure-bot-service
2个回答
0
投票

如果您只有OAuth访问令牌,则可以通过调用http GET来查询有关用户的详细信息:

用于PROD的https://login.salesforce.com/services/oauth2/userinfo或用于沙箱的https://test.salesforce.com/services/oauth2/userinfo

仅将Authorization: Bearer Y0UR0AUTHTOKEN添加到http GET请求的标头中。

根据我最近的测试,从服务器返回的结果如下:

{
    "sub": "https://test.salesforce.com/id/[organizationid]/[userId]",
    "user_id": "000",
    "organization_id": "000",
    "preferred_username": "[email protected]",
    "nickname": "myNick",
    "name": "name lastname",
    "urls": {
        ...
    },
    "active": true,
    "user_type": "STANDARD",
    ...
}

0
投票

您不需要userId来获取accessToken足够的用户信息。我已经安装了jsforce并使用下面的代码来获取身份信息。

通过做解决,

    const jsforce = require('jsforce');
    var connection = new jsforce.Connection({
            instanceUrl: instanceUrl,
            sessionId: accessToken
        });

        connection.identity((error, response) => {
            if(error) {
                callback({
                    status: 'failure',
                    message: error.message
                });
                return;
            }

            callback({
                staus: 'success',
                data: response
            });
        });
© www.soinside.com 2019 - 2024. All rights reserved.