oauth2.0 使用MSAL通过access_token获取刷新令牌

gwbalxhn  于 2023-10-15  发布在  其他
关注(0)|答案(1)|浏览(132)

我有一个应用程序,它有一个使用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"]}',
)
mzmfm0qo

mzmfm0qo1#

我最终能够解决这个问题,使用一个代表流。
FE应用程序创建传递给BE的令牌,BE为相关端点创建新令牌。
BE创建新令牌和刷新令牌,并将其存储在DB中。每次需要刷新令牌时,我们使用BE令牌。

相关问题