概要
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/