Может ли кто-нибудь сказать мне, почему я получаю тайм-аут , когда я использую ADAL -acquireToken для перефразирования sh токена, но за последние 5 минут он не обновляет sh правильно .
Мой код показан ниже, и я хочу знать, правильно ли я это делаю. Я тоже пробовал MSLA, он может обновить sh токен, используя acquireTokenSlient()
, но токен не может быть использован в бэк-энде.
Я не знаю, где разместить эту функцию handleWindowCallback()
.
AuthService
import AuthenticationContext from "adal-angular";
export default class AuthService {
private ctx: AuthenticationContext;
private options: AuthenticationContext.Options;
constructor(options: AuthenticationContext.Options) {
this.options = options;
this.ctx = new AuthenticationContext(options);
new Promise((resolve, reject) => { // ??? add this it can refresh after timeout
console.log("this.ctx", this.ctx);
if (
this.ctx.isCallback(window.location.hash) ||
window.self !== window.top
) {
// redirect to the location specified in the url params.
this.ctx.handleWindowCallback();
} else {
// try pull the user out of local storage
let user = this.ctx.getCachedUser();
// if (user) {
// resolve();
// }
// else {
// // no user at all - go sign in.
// this.login();
// }
}
});
}
get accessToken() {
return this.ctx.getCachedToken(this.options.clientId);
}
acquireToken(resource?: string): Promise<string> {
this.ctx.handleWindowCallback(); // ???
resource = resource || this.options.clientId;
return new Promise((resolve, reject) => {
this.ctx.acquireToken(resource, (err, token) => {
if (err) {
reject(err);
this.ctx.handleWindowCallback(); // ???
} else {
this.ctx.handleWindowCallback(); // ???
resolve(token);
}
});
});
}
...
}
запрос
import { auth } from "@/plugins/auth";
export async function request(options: AxiosRequestConfig): Promise<any> {
options.baseURL = URL.baseURL;
const isMock = state.getters.setting.mock === true;
if (isMock) {
return new Promise((resolve, reject) => {
setTimeout(() => {
try {
let data = getMockData(options);
// debug
options.url = formatURL(options.url, options.params);
console.groupCollapsed(`mock ${options.method} ${options.url}`);
console.dir({
request: options,
response: data
});
console.groupEnd();
resolve(data);
} catch (error) {
console.error(error);
reject(error);
}
}, randomNum(100, 2000));
});
}
options.url = formatURL(options.url, options.params);
options.headers = options.headers || {};
options.headers["x-source"] = window.location.origin;
let token = auth.accessToken;
options.headers.Authorization = `Bearer ${token}`;
auth
.acquireToken()
.then(token => {
token2 = token;
console.log("get token", token);
})
.catch(err => console.log("get error", err));
setTimeout(() => {
// let token2 = auth.accessToken;
console.log("token error each", { token, token2 }, token === token2);
}, 2000);
return axiosRequest(options);
}