FormidableLabs / FormidableLabs/react-native-app-auth

Unable to get accessToken in offline mode returning "null"?

オープン
#997 コメント 3 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Java
スター
2.3k
フォーク
473
PR マージ指標
30日以内にマージされた PR はありません

説明

## In offline mode, the Access token returns null even added the "offline_access" in the scope

Here the scope

API_ACCESS_SCOPE: [
'offline_access',
'api://xxxxxxxxxxxxxxxxxx/api-access',
],

getAzureApiAccessConfig() {
return {
issuer: `${MS_BASE_API_URL}${TENANT_ID}/v2.0`,
clientId: APP_ID,
redirectUrl: REDIRECT_URL,
scopes: API_ACCESS_SCOPE,

// additionalParameters: {prompt: 'select_account'},
serviceConfiguration: {
authorizationEndpoint: `${MS_BASE_API_URL}${TENANT_ID}/oauth2/v2.0/authorize`,
tokenEndpoint: `${MS_BASE_API_URL}${TENANT_ID}/oauth2/v2.0/token`,
revocationEndpoint: `${MS_BASE_API_URL}${TENANT_ID}/oauth2/v2.0/logout`,
},
};
}


async getAccessTokenAsync() {
try {
const userInfo = await this.getUserInfo();

const expireTime = userInfo.apiAccessTokens
? userInfo.apiAccessTokens.expiryTime
: null;

console.log('expireTime :>> ', expireTime);

if (expireTime !== null) {
// Get expiration time - 5 minutes

// If it's <= 5 minutes before expiration, then refresh

const expire = sub(parseISO(expireTime), {minutes: 5});

const now = new Date();

console.log(
'Expire comparison :>> ',

expire,

now,

compareAsc(now, expire),
);

if (compareAsc(now, expire) >= 0) {
// Expired, refresh

console.log('Refreshing token');

const refreshToken = userInfo.apiAccessTokens
? userInfo.apiAccessTokens.refreshToken
: null;

console.log(`Refresh token: ${refreshToken}`);

const result = await refresh(this.getAzureApiAccessConfig(), {
refreshToken: refreshToken || '',
});

if (!result?.accessToken) {
await this.logOut();

return null;
}

// Store the new access token, refresh token, and expiration time in storage

await SECURE_STORAGE.saveData(KEY_AUTH_USER_INFO, {
...userInfo,

apiAccessTokens: {
accessToken: result.accessToken,

refreshToken: result.refreshToken ?? '',

expiryTime: result.accessTokenExpirationDate,
},
});

return result.accessToken;
}

// Not expired, just return saved access token

const accessToken = userInfo.apiAccessTokens
? userInfo.apiAccessTokens.accessToken
: null;

return accessToken;
}

return null;
} catch (error) {
console.log('error while fetching access token :>> ', error);

await this.logOut();

return null;
}
}

please help me what's went wrong?

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

この報告ではリポジトリのファイルもテストも示されていないため、提示されている getAzureApiAccessConfig と getAccessTokenAsync のフローから始め、提供された Azure の認証エンドポイントとトークンエンドポイントを使用してください。offline_access のケースを再現し、null トークンがライブラリに由来するのか、アプリケーションに保存されたトークンデータに由来するのかを追跡してください。完了の条件は、再現可能なライブラリの不具合を特定するか、必要な設定変更を文書化することです。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
azure, javascript, react-native
領域
authentication, mobile
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
説明が足りない
初心者へのやさしさ
20/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。