IdentityServer4 со SPA и приветами - PullRequest
0 голосов
/ 05 февраля 2019

Я создал IdentityServer на основе нового шаблона dotnet "IdentityServer4 Quickstart UI (только ресурсы UI)" (is4ui).

Это хорошо работает вместе с приложением MVC, отображаемым на сервере, но я не могу получитьэто для работы со SPA, используя hellojs.

Я возился с URL, чтобы получить страницу входа с Identity Server.Логика входа работает нормально, но я думаю, что не хватает какой-то небольшой части для правильного перенаправления в мое клиентское приложение с токеном доступа.

Это код, который я использую для инициализации hellojs:

const AuthorityUrl = 'http://localhost:5000';
hello.init({
  'openidconnectdemo': {
    oauth: {
      version: '2',
      auth: AuthorityUrl + '/Account/Login',
      grant: AuthorityUrl + '/Grant'
    },
    scope_delim: ' '
  }
});

hello.init({
  openidconnectdemo: this.authConfig.clientId
});

И это код входа в систему

hello.login('openidconnectdemo', {
  redirect_uri: this.authConfig.redirectUrl,
  scope: `openid profile`,
  response_type: 'token',
  display: 'page',
});

В этом коде в AccountController Identity Server пытается перенаправить приложение, но это не удается, так как ReturnUrl имеет значение null:

                if (Url.IsLocalUrl(model.ReturnUrl))
                {
                    return Redirect(model.ReturnUrl);
                }
                else if (string.IsNullOrEmpty(model.ReturnUrl))
                {
                    return Redirect("~/");
                }
                else
                {
                    // user might have clicked on a malicious link - should be logged
                    throw new Exception("invalid return URL");
                }

DoМне нужно изменить Identity Server, чтобы они работали вместе или в клиентской части чего-то не хватает?

Спасибо за любой совет!

1 Ответ

0 голосов
/ 05 февраля 2019

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

Тем не менее, похоже, что ваша первая проблема заключается в том, что URL-адрес авторизации должен указывать на конечную точку авторизации, а не на знак в пользовательском интерфейсе, т. Е. Он должен быть /connect/authorize, а не /account/login.

...