**更新:**我注意到在我第一次运行ITM时传递了令牌,但是没有新的令牌被附加到我的规则中。
我在Gmail上安装了这个chrome扩展,用户登录后,它会返回一个访问令牌,该令牌通过HTTP请求传递给我们的API。第一次传递访问令牌时,它工作正常,但如果我不刷新Gmail,1小时后,访问令牌过期,我的应用程序出现401错误。我有一个函数interceptURL,它将匹配URL并在HTTP请求发出之前给予一个刷新的令牌(或者我是这么认为的)。
可能在1小时后,访问令牌过期,因此调用刷新令牌不会生成新令牌?
背景脚本
function interceptURL(requestDetails: chrome.webRequest.WebRequestBodyDetails) {
console.log('intercepted: ' + requestDetails.url);
if (requestDetails.url.includes(liveApiUrl) || requestDetails.url.includes(testApiUrl)) {
chrome.runtime.sendMessage({ "message": "refresh_token" }, (token: string) => {
if (token == undefined) {
chrome.runtime.sendMessage({ "message": "get_token" });
}
});
}
}
chrome.webRequest.onBeforeRequest.addListener(
interceptURL,
{ urls: [liveApiUrl, testApiUrl] }
)
"这是我的规则"
function GetInterceptRules(token: string) {
const allResourceTypes =
Object.values(chrome.declarativeNetRequest.ResourceType);
return [
{
id: 1,
priority: 1,
action: {
type: chrome.declarativeNetRequest.RuleActionType.MODIFY_HEADERS,
requestHeaders: [
{
operation: chrome.declarativeNetRequest.HeaderOperation.SET,
header: 'Authorization',
value: 'Bearer ' + token,
},
]
},
condition: {
urlFilter: liveApiUrl,
initiatorDomains: ["mail.google.com"],
resourceTypes: allResourceTypes,
}
},
{
id: 2,
priority: 1,
action: {
type: chrome.declarativeNetRequest.RuleActionType.MODIFY_HEADERS,
requestHeaders: [
{
operation: chrome.declarativeNetRequest.HeaderOperation.SET,
header: 'Authorization',
value: 'Bearer ' + token,
},
]
},
condition: {
urlFilter: testApiUrl,
initiatorDomains: ["mail.google.com"],
resourceTypes: allResourceTypes,
}
}
];
我的想法是:1 -我在每个HTTP请求之前给予它一个刷新令牌,这样当我更新动态规则时,它会传递新的令牌。(这是我目前拥有的)2 -我可以检查访问令牌是何时创建的,并确保在1小时结束之前运行获取令牌的代码。(可能不是最好的方法?)
获取访问令牌
chrome.identity.launchWebAuthFlow(
{
url: azureTokenAuthUrl,
interactive: isInteractive
},
(redirectURL: string) => {
let token: string = '';
if (redirectURL != null) {
let params = new URLSearchParams(redirectURL);
token = params.get("access_token");
}
console.log("acces_token", token);
console.log(redirectURL)
UpdateIntercept(token)
callback(token)
}
清单版本3
"permissions": [
"webRequest",
"declarativeNetRequest",
"declarativeNetRequestWithHostAccess",
"identity",
"identity.email"
],
"background": {
"service_worker": "/static/js/Background.js"
},
"content_scripts": [
{
"matches": [ "<all_urls>" ],
"css": [ "/css/bootstrap-iso.css" ],
"js": [ "react.production.min.js", "react-bootstrap.min.js", "react-dom.production.min.js" ]
},
{
"matches": [ "*://mail.google.com/*" ],
"css": [ "/css/AuthButton.css" ],
"js": [ "/static/js/AuthButton.js" ]
},
{
"matches": [ "*://mail.google.com/*" ],
"js": [ "/static/js/PushNotification.js" ]
}
],
我一直在寻找,但似乎不能找到一个解决我的问题。我尝试使用 JWT 解码,所以我知道它已经过期。
1条答案
按热度按时间2w2cym1i1#
将交互性为false的launchAuthFlow添加到我的侦听器中,我在侦听器中检查电子邮件是否已打开,如果已打开,则触发launchAuthFlow,将令牌附加到HTTP请求