「passport-azure-ad-oauth2」 npm モジュールを使用してアクセス トークンを取得し、それを MS Graph API に渡すことができます。
passport.use(new AzureAdOAuth2Strategy({
clientID: process.env.OUTLOOK_CLIENT_ID,
clientSecret: process.env.OUTLOOK_SECRET,
callbackURL: '/auth/outlook/callback',
},
function (accesstoken: any, refresh_token: any, params: any, profile, done) {
logger.info('Completed azure sign in for : ' + JSON.stringify(profile));
logger.info('Parameters returned: ' + JSON.stringify(params));
const decodedIdToken: any = jwt.decode(params.id_token);
logger.info('Outlook Access Token:' + accesstoken);
logger.info('Decoded Token: ' + JSON.stringify(decodedIdToken, null, 2));
process.env['OUTLOOK_ACCESS_TOKEN'] = accesstoken;
// add new user with token or update user's token here, in the database
}));
次に、'@microsoft/microsoft-graph-client' npm モジュールを使用して、次のようにグラフ API からカレンダー イベントをフェッチします。
try {
const client = this.getAuthenticatedClient(process.env['OUTLOOK_ACCESS_TOKEN']);
const resultSet = await client
.api('users/' + userId + '/calendar/events')
.select('subject,organizer,start,end')
.get();
logger.info(JSON.stringify(resultSet, null, 2));
} catch (err) {
logger.error(err);
}
getAuthenticatedClient(accessToken) {
logger.info('Using accestoken for initialising Graph Client: ' + accessToken);
const client = Client.init({
// Use the provided access token to authenticate requests
authProvider: (done) => {
done(null, accessToken);
}
});
return client;
}
ただし、成功したログインで提供された accessToken を使用すると、次のエラーが発生します: CompactToken の解析がエラー コードで失敗しました: 80049217
私が間違って何をしているのですか?
更新:これらは私が使用しているスコープです:「openid、profile、offline_access、calendars.read」
更新:スコープを少し編集した後、次のエラーが表示されます:無効なオーディエンス。
jwt.ms で受信したトークンをデコードすると、「aud」の値は次のようになります: "00000002-0000-0000-c000-000000000000"
Passport-azure-ad-oauth2が MS Graph API のトークンを取得するための間違ったライブラリであるということですか?