Ни один пользователь в signinSilentCallback не использует identityserver и oidc клиент javascript - PullRequest
0 голосов
/ 18 мая 2018

Я получаю неопределенного пользователя в следующем коде.

Я уже прошел аутентификацию пользователя из MVC.

Но когда я использую signinSilentCallback для получения подробной информации об этом пользователе, он становится неопределенным, используя oidc-client в js.

Это также не дает никакой ошибки.

        var mgr = new UserManager({
                    authority: "http://localhost:5000",
                    client_id: "js",
                    redirect_uri: "http://localhost:50144/signin-oidc",
                    silent_redirect_uri: "http://localhost:50144/signin-oidc",
                    response_type: "id_token token",
                    post_logout_redirect_uri: "http://localhost:50144/signout-callback-oidc",
                });

        mgr.signinSilentCallback().then(function (user) {

            //**Here user is undefined.**
            axios.defaults.headers.common['Authorization'] = "Bearer " + user.access_token;

        });

В Identityserver 4 клиент определяется следующим образом.

new Client
                {
                    ClientId = "js",
                    ClientName = "js",
                    ClientUri = "http://localhost:50144",

                    AllowedGrantTypes = GrantTypes.Implicit,
                    AllowAccessTokensViaBrowser = true,
                    RequireClientSecret = false,
                    AccessTokenType = AccessTokenType.Jwt,

                    RedirectUris = 
                    {
                        "http://localhost:50144/signin-oidc",
                    },

                    PostLogoutRedirectUris = { "http://localhost:50144/signout-callback-oidc" },
                    AllowedCorsOrigins = { "http://localhost:50144" },

                    AllowedScopes =
                    {
                        IdentityServerConstants.StandardScopes.OpenId,
                        IdentityServerConstants.StandardScopes.Profile,
                        IdentityServerConstants.StandardScopes.Email
                    }
                }

Ответы [ 2 ]

0 голосов
/ 14 августа 2018

вы можете установить для AutomaticSilentRenew значение true в вашей конфигурации

var mgr = new UserManager({
                authority: "http://localhost:5000",
                client_id: "js",
                redirect_uri: "http://localhost:50144/signin-oidc",
                silent_redirect_uri: "http://localhost:50144/signin-oidc",
                response_type: "id_token token",
                post_logout_redirect_uri: "http://localhost:50144/signout-callback-oidc",
                automaticSilentRenew: true; //here

            });

и использовать события UserManager для загрузки нового пользователя при обновлении токена

this.mgr.events.addUserLoaded(args => {
  this.mgr.getUser().then(user => {
    this._user = user; // load the new user
  });
});
0 голосов
/ 21 мая 2018

signinSilentCallback: возвращает обещание уведомить родительское окно об ответе от конечной точки авторизации.https://github.com/IdentityModel/oidc-client-js/wiki

signinSilentCallback - это не что-то, что вернет вам объект пользователя.

Если вам действительно нужно получить объект пользователя наЯ бы предложил использовать этот подход в следующем фрагменте кода.Это работает и для меня в приложениях salesforce.

this.userManager.events.addAccessTokenExpiring(() =>
            {
                this.userManager.signinSilent({scope: oidcSettings.scope, response_type: oidcSettings.response_type})
                    .then((user: CoreApi.Authentication.Interfaces.OidcClientUser) =>
                    {
                        this.handleUser(user); // This function just set the current user
                    })
                    .catch((error: Error) =>
                    {
                        this.userManager.getUser()
                            .then((user: CoreApi.Authentication.Interfaces.OidcClientUser) =>
                            {
                                this.handleUser(user);
                            });
                    });
            });

Нам также нужно обработать getUser в catch из-за одной из ошибок, обнаруженных для iFrame в oidc-клиенте js

Сверху код сфокусирован на том, как выполняется автоматическое обновлениекогда срок действия токена истекает.

...