我有一个应用程序,它有一个使用JavaScript的前端和一个使用Python的后端。我想让用户允许我的应用权限读取他们的电子邮件收件箱。
为此,JSFE有一个Sign In按钮,请求“Mail.Read”权限并获得一个accessToken。我想在我的后端存储accessToken,当需要的时候,我想刷新令牌并再次访问电子邮件(我在后端有一个任务,读取电子邮件的主题,并在满足某些条件时显示给用户)。
我怎么能做到这一点?
JavaScript FE端:
const msalInstance = new PublicClientApplication(msalConfig);
const loginPopup = async () => {
try {
const loginResponse = await msalInstance.loginPopup(
msalConfig.tokenRequest
);
props.onSuccess(loginResponse); // This sends the response to the server
console.log("loginResponse", loginResponse);
} catch (err) {
console.error(err);
props.onFailure(err);
}
};
Python BE:
authorization_data = j["data"]
try:
f = open(consts.O365_OAUTH_CREDS_PATH)
creds_data = json.load(f)
f.close()
except:
raise FileNotFoundError(
"Could not open file. Make sure that it exists."
)
app = ConfidentialClientApplication(
client_id=creds_data["auth"]["client_id"],
client_credential=creds_data["auth"]["client_secret"],
authority=f'{creds_data["auth"]["authority_base_uri"]}{authorization_data["tenantId"]}',
)
1条答案
按热度按时间mzmfm0qo1#
我最终能够解决这个问题,使用一个代表流。
FE应用程序创建传递给BE的令牌,BE为相关端点创建新令牌。
BE创建新令牌和刷新令牌,并将其存储在DB中。每次需要刷新令牌时,我们使用BE令牌。