OKTA - OAuthError: Illegal value for redirect_uri parameter

OKTA - OAuthError: Illegal value for redirect_uri parameter

我在 OKTA 中使用我的开发者帐户工作。

我正在尝试获取一个非常简单的 SPA 应用程序以从 OKTA 获取 JWT。

  1. 我使用 authClient.signIn({}) 登录并且 returns a transaction.sessionToken/

  2. 使用该会话令牌我应该能够调用 authClient.token.getWithoutPrompt({}) 但我永远无法访问该代码。

我收到以下错误:OAuthError:redirect_uri 参数的非法值。

如何解决此 OAuth 错误,以便最终取回 JWT。我在 OKTA GIT 上尝试过示例,但无法正常工作。

function getJWT()
{
  var orgUrl = 'https://MYXXXXXXX.oktapreview.com'; 
  var keyID = "MY CLIENT ID";

  var user = "MYUSER ID";
  var pwd =  "MY PASWORD"

  var appScope = ['openid', 'email', 'profile', 'phone', 'groups'];  

  var authClient = new OktaAuth({url: orgUrl, clientId: keyID,});

  $('#tokendiv').html('');

  authClient.signIn({
          username: user,
          password: pwd,
          redirectUri:  "http://localhost:5656/test.html"  //THIS IS SETUP IN MY OKTA ID
        })
        .then(function(transaction) {
          if (transaction.status === 'SUCCESS') {
            authClient.session.setCookieAndRedirect(transaction.sessionToken); // Sets a cookie on redirect
            console.log(transaction.sessionToken);
            $('#tokendiv').append('<h4>Session Token</h4>' + transaction.sessionToken);

            /// THIS IS NEVER REACHED, I Always Get OAuthError: Illegal value for redirect_uri parameter.
            authClient.token.getWithoutPrompt({     
              responseType: 'id_token', // or array of types            
              scopes: appScope,
              sessionToken: transaction.sessionToken
            })
              .then(function(res) {
                console.log("JWT: " + jwt);
                $('#tokendiv').append('<h4>JWT</h4>' + res.idToken);
              })
              .fail(function(err) {
                console.log("ERROR " + err);
                $('#tokendiv').append('<h4>Error</h4>' + err);
              })                        

          } else {
            throw 'We cannot handle the ' + transaction.status + ' status';
          }
        })
        .fail(function(err) {
          console.error(err);
        });
}

只要您的redirectUri包含在您Okta Developer organization中批准的重定向URI中,您就不会收到该错误。

下面我能够在 localhost:5656 上成功 return 一个 id_token 运行。

<!-- index.html -->

<html>
    <body>
        <button onClick="getJWT()">Button</button>
        <div id="tokendiv"></div>
    </body>
</html>

<script>
    function getJWT(){
        var orgUrl = 'https://{{org}}.oktapreview.com'; 
        var keyID = "{{clientId}}";

        var user = "{{user}}";
        var pwd =  "{{password}}"

        var appScope = ['openid', 'email', 'profile', 'phone', 'groups'];  

        var authClient = new OktaAuth(
            {
                url: orgUrl,
                clientId: keyID,
                redirectUri: "http://localhost:5656/index.html"
            });

        $('#tokendiv').html('');

        authClient.signIn({
                username: user,
                password: pwd,
        })
        .then(function(transaction) {
            if (transaction.status === 'SUCCESS') {
                authClient.token.getWithoutPrompt({     
                    responseType: 'id_token', // or array of types            
                    scopes: appScope,
                    sessionToken: transaction.sessionToken
                })
                .then(function(res) {
                    $('#tokendiv').append('<h4>JWT</h4>' + res.idToken);
                    console.log("JWT: " + JSON.stringify(res));
                })
                .fail(function(err) { /* err */ })                        
            } else { /* throw error */ }
        })
        .fail(function(err) { /* err */ });
    }
</script>