如何使用 SPA 或 Web 应用程序在 Okta 中获取 refresh_token

How to get refresh_token in Okta using SPA or web app

我将 okta-auth-js 与 SPA 一起使用,我想检索刷新令牌。

我的配置如下:

okta: {
    issuer: 'https://myIssuer/oauth2/default',
    clientId: '0oahHMKdu3BlV0x1hdoa7lV0',
    redirectUri: 'http://localhost:3000/login/callback',
    responseType: 'code'
  }

然后我这样执行身份验证:

oktaAuth.signInWithCredentials({
    username,
    password
  }).then((transaction) => {
      switch (transaction.status) {
        case 'SUCCESS': {
          const { sessionToken } = transaction;
          oktaAuth.token.getWithRedirect({ sessionToken });
          break;
        };
        ... // Other status cases

我在 Okta 仪表板中启用了刷新令牌轮换,但我只收到 access_token 和 id_token 作为响应。

我的问题是如何获得 refresh_token?

您需要在范围中包含 offline_access

source

我找到了解决办法:)

您必须在调用 /authorize 时使用会话令牌添加 offline_access 范围。

例如:

oktaAuth.signInWithCredentials({
    username,
    password
  }).then((transaction) => {
          switch (transaction.status) {
            case 'SUCCESS': {
              const { sessionToken } = transaction;
              oktaAuth.token.getWithRedirect({
                sessionToken,
                scopes: ['openid', 'offline_access']
              });
              break;
            }
        ... // Other status cases