10

app.js我有一个AuthorizationInterceptor检查用户是否登录的情况。当用户令牌过期时,它会遇到错误条件和错误Frame window timed out(见下文),然后进入重定向循环。我想进行静默登录,但我猜 iframe 出错了。我看不到它曾经重定向到silent-callback.html- 它只命中callback.html

app.factory("AuthorizationInterceptor", ['$q', '$injector', '$rootScope', '$window', 'authService', function ($q, $injector, $rootScope, $window, authService) {

    var request = function (requestSuccess) {

        var currentTime = Math.floor(Date.now() / 1000);

                var deferred = $q.defer();
                var oidcManager = window.translation.oidcUserManager;

                oidcManager.getUser().then(function (u) {
                    if (u) {

                        if (u['expires_at'] < currentTime + 10) {
                            oidcManager.signinSilent()
                                .then(function (user) {
                                    requestSuccess.headers['Authorization'] = "Bearer " + user["access_token"];
                                    deferred.resolve(requestSuccess);
                                }, function (err) {
                                    console.log('getuser error' + err);  //this logs the below error.
                                    authService.login();
                                    deferred.resolve(true);
                                });
                        } else {
                            console.log('AuthInterceptor requestSuccess.headers');
                            requestSuccess.headers['Authorization'] = "Bearer " + u["access_token"];
                            deferred.resolve(requestSuccess);
                        }
                    }
                    else {
                        authService.login();
                        deferred.resolve(true);
                    }
                });
                return deferred.promise;

    };

错误消息记录到控制台:

getuser errorError: Frame window timed out  app.js:92:41

Error: c.paramSerializer is not a function
p@http://localhost:5050/lib/angular/angular.min.js:88:204
n/h<@http://localhost:5050/lib/angular/angular.min.js:86:245
f/<@http://localhost:5050/lib/angular/angular.min.js:118:334
$eval@http://localhost:5050/lib/angular/angular.min.js:132:448
$digest@http://localhost:5050/lib/angular/angular.min.js:129:455
$evalAsync/<@http://localhost:5050/lib/angular/angular.min.js:133:30
e@http://localhost:5050/lib/angular/angular.min.js:43:93
Hf/l.defer/c<@http://localhost:5050/lib/angular/angular.min.js:45:491

这是我的设置和功能authService.login()

 var config = {
        authority: url,
        client_id: "js",
        redirect_uri: url + "/LocalizationAdmin/callback.html",
        response_type: "id_token token",
        scope: "openid profile api1",
        post_logout_redirect_uri: url + "/LocalizationAdmin/index.html",
        silent_redirect_uri: url + "/LocalizationAdmin/silent-callback.html",
        automaticSilentRenew: true
    };

 function login() {
        mgr.getUser().then(function (u) {
            if (u) {
                var currentTime = Math.floor(Date.now() / 1000);

                if (u['expires_at'] < currentTime + 10) {
                    mgr.signinSilent()
                        .then(function (user) {
                            var idToken = user.id_token;
                            var dataIdToken = getDataFromToken(idToken);

                        }, function (err) {
                            mgr.signinRedirect();
                        });
                }
            }
            else {
                mgr.signinRedirect();
            }
        });

非常坚持这一点 - 任何帮助表示赞赏。

4

1 回答 1

0

您是否将静默更新 URL (.../silent-renew.html) 添加到 IdentityServer 中允许的重定向 URI 列表中?

于 2021-08-12T06:13:37.207 回答