Node.jsでOAuthの認証

概要

SAP mobile service の認証をOAuthを使って作ってみた。
今度はクライアント側の設定をNode.jsでやってみる。
※これを書いているときに気付いたのですが、client-oauth2すごい簡単な方法があることに気づく

環境

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.15.4
BuildVersion:   19E287

$ node -v
v14.0.0

実装

tokenの取得

ClientID/ClientSecretはmobile service と紐づいているxsuaaにあるものを使用
accessTokenUriもそこにあるuriを使用。


const _getAccessToken = function () {
    return new Promise((resolve, reject) => {

        var SCPMS = new ClientOAuth2({
            clientId: '<client-id>',
            clientSecret: '<client-secret>',
            accessTokenUri: 'https://subaccount.authentication.eu10.hana.ondemand.com/oauth/token',
            scopes: []
        });

        SCPMS.owner.getToken('sample@email.com', 'password')
            .then(result => {
                resolve({ accessToken: result.accessToken });
            })
            .catch(error => {
                reject({ message: 'Error: failed to get access token.', error: error });
            });
    });
}

トークンを使用してデータにアクセス

取得したトークンを使ってクエリ実行

const _doQUERY = function (serviceUrl, accessToken) {
    return new Promise(function (resolve, reject) {
        const options = {
            url: serviceUrl,
            resolveWithFullResponse: true,
            headers: {
                Authorization: 'Bearer ' + accessToken,
                Accept: 'application/json'
            }
        };

        request(options)
            .then(response => {
                if (response && response.statusCode == 200) {
                    resolve({ responseBody: response.body });
                }
                reject({ message: 'Error while calling OData service' });
            })
            .catch(error => {
                reject({ message: 'Error occurred while calling OData service', error: error });
            });
    });
};

/** OUT PUT
 * $ node OAuth_mod.js
 *   Successfully fetched OAuth access token: <token>
 *   Successfully called OData service. Response body: [{"name":"com.sap.edm.sampleservice.v2","url":"https://subaccount-dev-com-sample3-demo.cfapps.eu10.hana.onde
 * 
 */

参考にさせてもらったブログ
https://blogs.sap.com/2019/05/20/sap-cloud-platform-backend-service-tutorial-18-api-called-from-external-node.js/

コメントを残す

%d人のブロガーが「いいね」をつけました。